我遇到了以下情况:我有每个类的层次结构表:
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; }
}域映射器逻辑的一小部分(几乎相同):
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中看到的对加载集合的非法访问:
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)]没有判别器字段。有可能修好吗?
发布于 2017-09-25 23:03:16
你能试试:
var hierarchyRoots = hierarchyEntities.Except(roots);我认为您可能需要给它精确的叶映射,我认为它不会假设它应该将从根继承的所有类映射为tpch。
https://stackoverflow.com/questions/46408952
复制相似问题