nHibernate - 使用私有集合获取

时间:2012-05-30 16:24:37

标签: nhibernate nhibernate-mapping linq-to-nhibernate

有没有办法使用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的私人集合一起使用?

2 个答案:

答案 0 :(得分:0)

NHibernate在从数据库加载代理时从对象生成代理,因此要映射的属性必须是虚拟的。您应该将您的私人猫咪集合保护为虚拟,然后重试。我只使用受保护的setter和public getter映射属性,但此解决方案也适用于完全受保护的属性。

答案 1 :(得分:0)

您需要在属性映射中指定nosetter访问策略。

请查看此答案以获取详细信息:Domain Model with Nhibernate design issue