有没有办法使用Fetch与私有的集合?
这就是我对代码所拥有的:
public class Owner
{
private ICollection<Cat> _cats = new List<Cat>();
public virtual int Id { get; set; }
public virtual IEnumerable<Cat> Cats { get { return _cats; } }
public virtual void AddCat(Cat cat) { ... }
}
public class Cat
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Owner Owner { get; set; }
}
大多数时候,我想懒加载Cats集合,但有时我不这样做。我想在Linq查询中使用Fetch来急切加载它。我目前得到一个“无法解决财产:猫......”的例外情况。我假设我得到这个因为我在ClassMapping中有一个Set(“_ cats”,...),并且它正在寻找要映射的属性Cats。有没有办法让Fetch与Cats的私人集合一起使用?
答案 0 :(得分:0)
NHibernate在从数据库加载代理时从对象生成代理,因此要映射的属性必须是虚拟的。您应该将您的私人猫咪集合保护为虚拟,然后重试。我只使用受保护的setter和public getter映射属性,但此解决方案也适用于完全受保护的属性。
答案 1 :(得分:0)
您需要在属性映射中指定nosetter
访问策略。
请查看此答案以获取详细信息:Domain Model with Nhibernate design issue