0

有没有办法将 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 来急切加载它。我目前收到“无法解析属性:Cats ...”异常。我假设我得到了这个,因为我的 ClassMapping 中有一个 Set("_cats", ...),它正在寻找要映射的属性 Cats。有没有办法让 Fetch 与 Cats 的私人收藏一起工作?

4

2 回答 2

0

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

详细查看这个答案:Domain Model with Nhibernate design issue

于 2012-05-31T03:06:43.077 回答
0

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

于 2012-05-30T17:23:53.727 回答