0

私は持っている

public class Parents {
    public Parents() {
        Childs = new HashedSet<Childs>();
    }
    public virtual int Id {get; set;}
    public virtual String Name {get; set;}
    public virtual ISet<Childs> Childs {get; protected set;} 
}

public class Childs {
    public virtual int Id {get; set;}
    public virtual String Name {get; set;}
    public virtual Parents Parent {get; set;}
}

マッピング

....
.Override<Parents>(map => {
    map.HasMany(x => x.Childs).KeyColumn("parent_id").Cascade.SaveUpdate().Not.LazyLoad().AsSet().Fetch().Join();
})
 .Override<Childs>(map => {
      map.References(x => x.Parent, "parent_id");
})
....

Link、HQL、または AutoMapper を使用して子を持つ親を取得 (選択) するにはどうすればよいですか? たとえば、テストケースで次のようなクエリがあります。

Parents parent = new Parents {Name = "parent test"};
Childs child   = new Childs {Name = "child test", Parent = parent};
session.Save(parent);
session.Save(child);
...
var myParent = session.QueryOver<Parents>().Where(x=>x.Id==1).List()[0];
Assert.IsTrue(myParent.Childs.Count>0);
...

ログにクエリが表示されます:結合で選択しますが、子なしで親のみを取得します

4

1 に答える 1

0

「Childs」プロパティを逆にする必要があります。

逆の場合は格納されません。テストケースでは、リストは空です(子を親に追加せず、子の後方参照を親に設定するだけです)。格納されている場合、NH はデータベース内のリストをクリアし、子を親から削除します。

于 2012-08-30T11:33:11.603 に答える