NHibernate ThenFetchMany 正在检索重复的子项

2024-03-26

我有一个父对象,其子集合包含一个元素,子集合包含一个包含 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(使用前将#替换为@)

NHibernate ThenFetchMany 正在检索重复的子项 的相关文章

随机推荐