首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NHibernate/Conform中的一个类中每个类层次结构表的两个集合

NHibernate/Conform中的一个类中每个类层次结构表的两个集合
EN

Stack Overflow用户
提问于 2017-09-25 15:32:04
回答 1查看 46关注 0票数 0

我遇到了以下情况:我有每个类的层次结构表:

代码语言:javascript
复制
public abstract class Parent : BaseEntity, IHierarchyEntity
    {
    }  

public class ChildA : Parent
{
    public virtual string Name { get; set; }
}

public class ChildB : Parent
{
    public virtual string Value { get; set; }
}

public class Container : BaseEntity
{
    public Container()
    {
        CollectionOne = new HashSet<ChildA>();
        CollectionTwo = new HashSet<ChildB>();
    }

    public virtual ICollection<ChildA> CollectionOne { get; set; }

    public virtual ICollection<ChildB> CollectionTwo { get; set; }
}

域映射器逻辑的一小部分(几乎相同):

代码语言:javascript
复制
IEnumerable<Type> allPersistEntities = GetDomainEntities();
IEnumerable<Type> roots = allPersistEntities.Where(t => t.IsAbstract && t.InheritedFromBaseEntity());
IEnumerable<Type> hierarchyEntities = allPersistEntities.Where(t => typeof(IHierarchyEntity).IsAssignableFrom(t));
var hierarchyRoots = hierarchyEntities.Where(t => t.IsAbstract && t.InheritedFromBaseEntity());
orm.TablePerClassHierarchy(hierarchyRoots);

当我保存项目时,一切都正常,但是当我尝试获取项目时,我在CollectionOne (ChildA类型)中得到了其中的两个,在第二个项目中得到了错误:

我在sql中看到的对加载集合的非法访问:

代码语言:javascript
复制
NHibernate:
    SELECT
        container0_.Id as Id0_0_
    FROM
        CONTAINERS container0_
    WHERE
        container0_.Id=@p0;
    @p0 = 1 [Type: Int32 (0)] NHibernate:
    SELECT
        collection0_.ContainerId as Containe5_1_,
        collection0_.Id as Id1_,
        collection0_.Id as Id1_0_,
        collection0_.Name as Name1_0_
    FROM
        PARENTS collection0_
    WHERE
        collection0_.ContainerId=@p0;
    @p0 = 1 [Type: Int32 (0)] NHibernate:
    SELECT
        collection0_.ContainerId as Containe5_1_,
        collection0_.Id as Id1_,
        collection0_.Id as Id1_0_,
        collection0_.[Value] as Value3_1_0_
    FROM
        PARENTS collection0_
    WHERE
        collection0_.ContainerId=@p0;
    @p0 = 1 [Type: Int32 (0)]

没有判别器字段。有可能修好吗?

EN

回答 1

Stack Overflow用户

发布于 2017-09-25 23:03:16

你能试试:

代码语言:javascript
复制
var hierarchyRoots = hierarchyEntities.Except(roots);

我认为您可能需要给它精确的叶映射,我认为它不会假设它应该将从根继承的所有类映射为tpch。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46408952

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档