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层并为每个属性添加虚拟。
答案 0 :(得分:4)
这是使用NHibernate的基本要求;它允许NHibernate生成一个代理类,该代理类从您的类中继承,用于延迟加载等。
我还没有看到删除此要求的方法,但是如果这样的话可能就意味着你不能使用延迟加载的对象和/或属性。
Here's a blog post that explains this a bit more;它还提供了一种避免将属性标记为虚拟的方法,尽管我建议您不要使用此方法(标记类以避免延迟加载),因为在大多数情况下延迟加载的好处远远超过制作属性的成本虚拟