使用FluentNhibernate时,Entity中的属性是否必须是虚拟的?

时间:2010-12-11 01:58:23

标签: fluent-nhibernate entity virtual

FluentNHibernate使用哪个实体作为实体

我在域(或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应该是'public / protected virtual'或'protected internal virtual'

是的,我记得程序员在使用FluentNHibernate时的要求,实体应该是这样的:

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

但它看起来很有线。你这么认为吗?使用FluentNHibernate时如何做?我不想回到Domain层并为每个属性添加虚拟。

1 个答案:

答案 0 :(得分:4)

这是使用NHibernate的基本要求;它允许NHibernate生成一个代理类,该代理类从您的类中继承,用于延迟加载等。

我还没有看到删除此要求的方法,但是如果这样的话可能就意味着你不能使用延迟加载的对象和/或属性。

Here's a blog post that explains this a bit more;它还提供了一种避免将属性标记为虚拟的方法,尽管我建议您不要使用此方法(标记类以避免延迟加载),因为在大多数情况下延迟加载的好处远远超过制作属性的成本虚拟