nHibernate-使用私有集合获取

nHibernate-使用私有集合获取,nhibernate,nhibernate-mapping,linq-to-nhibernate,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 vi

有没有一种方法可以将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; }
}
公共类所有者
{
私有ICollection_cats=新列表();
公共虚拟整数Id{get;set;}
公共虚拟IEnumerable猫{get{return\u Cats;}}
公共虚拟空间AddCat(Cat Cat){…}
}
公猫
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟所有者{get;set;}
}

大多数时候,我想懒洋洋地加载猫的收藏,但有时我不想。我想在Linq查询中使用Fetch来加载它。我目前得到一个“无法解析属性:Cats…”异常。我假设我得到这个是因为我在类映射中有一个集合(“_cats”,…),它寻找要映射的属性cats。有没有办法让Fetch与私人收藏的猫一起工作

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

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

请查看此答案以了解详细信息: