2010-12-11 8 views
1

Welche Einheit FluentNHibernate als Einheit verwendetMüssen die Eigenschaften in Entity virtuell sein, wenn FluentNibernate verwendet wird?

ich eine Entität in Domain erstellen (oder BLL), wie die folgenden:

public class Role 
{ 
    public long ID { get; protected set; } 
    public string Name { get; set; } 
    public string Description { get; set; } 
    public List<User> Users { get; set; } 

    public Role() 
    { 
     Users = new List<User>(); 
    } 
} 

Und ich will Verwendung von FlunetNHibernate machen sie auf der Karte, aber Fehlermeldungen erhalten:

Die folgenden Typen als Stellvertreter dürfen nicht verwendet werden: Freeflying.Domain.Core.Profile: Methode GET_ID ‚public/geschützten virtuellen‘ sein sollte oder ‚interne virtuelle geschützt‘

Ja, ich erinnern an die Programmierer Anforderung bei der Verwendung FluentNHibernate, sollte das Unternehmen wie folgt sein:

public class Role 
{ 
    public virtual long ID { get; protected set; } 
    public virtual string Name { get; set; } 
    public virtual string Description { get; set; } 
} 

aber es sieht verdrahtet. Denkst du so? Wie macht man FluentNHibernate? Ich möchte nicht zum Domain-Layer zurückkehren und virtuell für jede Eigenschaft hinzufügen.

Antwort

4

Dies ist eine Grundvoraussetzung für die Verwendung von NHibernate; Es ermöglicht NHibernate, eine Proxy-Klasse zu generieren, die von Ihrer Klasse abstammt, um lazy zu laden und so weiter.

Ich habe keine Methode gesehen, diese Anforderung zu entfernen, obwohl, wenn so etwas möglich ist, es bedeuten würde, dass Sie das verzögerte Laden von Objekten und/oder Eigenschaften nicht verwenden könnten.

Here's a blog post that explains this a bit more; Es bietet auch eine Möglichkeit, Ihre Eigenschaften als virtuell zu markieren, obwohl ich wirklich empfehlen würde, dass Sie diese Methode nicht verwenden (Klassen zum Vermeiden von Lazy Loading markieren), da die Vorteile des lazy loading in den meisten Fällen die Kosten für die Erstellung Ihrer Eigenschaften bei weitem übersteigen virtuell.