Fluent Nhibernate使用填充的子集合获取对象

时间:2012-08-30 11:26:43

标签: fluent-nhibernate

我有

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);
...

在日志中我看到查询:选择加入,但我只得到没有孩子的父母

1 个答案:

答案 0 :(得分:0)

您需要将“Childs”属性反转。

如果是反转,则不存储。在您的测试用例中,列表为空(您不将子项添加到父项,您只将子项中的后引用设置为父项)。如果它存储了,它现在正在做什么,NH清除数据库中的列表并从父项中删除子项。