我有一个父对象,其子集合包含一个元素,子集合包含一个包含 3 个元素的“孙子”集合。
我使用 NHibernate 从数据库加载父对象,如下所示
Parent parentObject = session.Query<Parent>()
.FetchMany(x => x.Children)
.ThenFetchMany(x => x.GrandChildren)
.Where(x => x.Id = "someparentid")
.Single();
我发现父对象应该只有一个,而父对象却附加了重复的子对象(总共 3 个)。 (每个子对象正确附加了 3 个孙对象。)急切加载子对象集合只能正常工作。
你知道我如何实现加载完整的父对象而不需要重复的子对象吗?
如果将 Children 和 GrandChildren 映射为 set,则可以避免笛卡尔积。您需要将 Children 和 Grandchildren 定义为集合:
public class Parent
{
...
public virtual ICollection<Child> Children { get; set; }
...
}
public class Child
{
...
public virtual ICollection<GrandChild> GrandChildren { get; set; }
...
}
在映射中(使用 FluentNHibernate):
public class ParentMapping : ClassMap<Parent>
{
public ParentMapping()
{
...
HasMany(x => x.Children)
.KeyColumn("ParentID")
.Inverse
.AsSet()
...
}
}
public class ChildMapping : ClassMap<Child>
{
public ChildMapping()
{
...
HasMany(x => x.GrandChildren)
.KeyColumn("ChildID")
.Inverse
.AsSet()
...
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)