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を使用して、熱心にロードしたいと思います。現在、「プロパティを解決できませんでした:猫...」という例外が発生します。ClassMappingにSet( "_ cats"、...)があり、マップされるプロパティCatsを探しているため、これを取得すると想定しています。Fetchを猫のプライベートコレクションで動作させる方法はありますか?

4

2 に答える 2

0

NHibernate は、オブジェクトがデータベースからロードされるときに、オブジェクトからプロキシを生成するため、マップするプロパティは仮想でなければなりません。プライベートな猫のコレクションを仮想的に保護して、もう一度やり直してください。保護されたセッターとパブリック ゲッターを使用してプロパティのみをマップしましたが、このソリューションは完全に保護されたプロパティにも適している場合があります。

于 2012-05-30T17:23:53.727 に答える