2010-12-11 43 views
1

哪個實體FluentNHibernate使用作爲實體使用FluentNhibernate時,Entity中的屬性必須是虛擬的嗎?

我創建的域(或BLL),一些實體,如下列:

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>(); 
    } 
} 

我想利用FlunetNHibernate的映射他們,但得到的錯誤:

以下類型可能不被用作代理: Freeflying.Domain.Core.Profile:方法get_ID應該是「公共/受保護虛擬」或「受保護的內部虛擬」

是的,我記得程序員需要的時候使用FluentNHibernate,實體應該是這樣的:

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

但它看起來有線。你是這麼認爲的嗎?在使用FluentNHibernate時你怎麼做?我不想回到域圖層併爲每個屬性添加虛擬。

回答

4

這是使用NHibernate的基本要求;它允許NHibernate生成一個代理類,該類從您的類延遲到延遲加載等。

我還沒有看到消除這種需求的方法,但如果這樣的事情是可能的,這將意味着你不能使用對象和/或屬性的延遲加載。

Here's a blog post that explains this a bit more;它還提供了一種避免將屬性標記爲虛擬的方法,但是我真的建議您不要使用此方法(標記類以避免延遲加載),因爲在大多數情況下,延遲加載的好處遠遠超過製作屬性的成本虛擬。