具有多个相同类型的多对多列表的Nhibernate实体?

具有多个相同类型的多对多列表的Nhibernate实体?,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,有人知道我如何将一个实体映射为两个具有相同子类型的多对多集合吗 我的数据库结构是。。。。 “正常”关系将是 tbl_Parent col_Parent_ID tbl_Parent_Child_Xref col_Parent_ID col_Child_ID tbl_Child col_Child_ID 另一种关系是 tbl_Parent col_Parent_ID tbl_Include_ParentChild_Xref col_Parent_ID

有人知道我如何将一个实体映射为两个具有相同子类型的多对多集合吗

我的数据库结构是。。。。 “正常”关系将是

tbl_Parent
  col_Parent_ID

tbl_Parent_Child_Xref
   col_Parent_ID
   col_Child_ID

tbl_Child
   col_Child_ID

另一种关系是

tbl_Parent
  col_Parent_ID

tbl_Include_ParentChild_Xref
   col_Parent_ID
   col_Child_ID

tbl_Child
   col_Child_ID

实体和映射如下所示

public partial class ParentEntity : AuditableDataEntity<ParentEntity>
{
  public virtual IList<ChildEntity> Children { get; set; }
  public virtual IList<ChildEntity> IncludedChildren { get; set; }
}

public partial class ParentMap : IAutoMappingOverride<ParentEntity>
{
    public void Override(AutoMapping<ParentEntity> mapping)
    {
        mapping.Table("tbl_Parent");

        mapping.HasManyToMany(x => x.Children)
        .Table("tbl_Parent_Child_Xref")
        .ParentKeyColumn("col_Parent_ID")
        .ChildKeyColumn("col_Child_ID")
        .Inverse()
        .Cascade.All();

        mapping.HasManyToMany(x => x.IncludedChildren)
        .Table("tbl_Include_ParentChild_Xref")
        .ParentKeyColumn("col_Parent_ID")
        .ChildKeyColumn("col_Child_ID")
        .Inverse()
        .Cascade.All();
    }
}
公共部分类ParentEntity:AuditableDataEntity
{
公共虚拟IList子项{get;set;}
公共虚拟IList包含子项{get;set;}
}
公共部分类ParentMap:IAutoMappingOverride
{
公共无效替代(自动映射)
{
映射表(“tbl_父项”);
mapping.HasManyToMany(x=>x.Children)
.Table(“tbl\u父项\u子项\u外部参照”)
.ParentKeyColumn(“col\u Parent\u ID”)
.ChildKeyColumn(“col\u Child\u ID”)
.Inverse()
.Cascade.All();
mapping.HasManyToMany(x=>x.includeChildren)
.Table(“tbl\u包括\u父项子项\u外部参照”)
.ParentKeyColumn(“col\u Parent\u ID”)
.ChildKeyColumn(“col\u Child\u ID”)
.Inverse()
.Cascade.All();
}
}

我得到的错误是 “System.NotSupportedException:无法确定多对多属性‘子对象’的另一面应该是什么。”


我使用的是NHibernate 2.1.2和FluentNhibernate 1.0。

你知道我只是在暗中拍摄,但听起来你的ChildEntity类似乎不为Hibernate所知。。这就是我通常看到的那种信息。Hibernate检查您的类并查看id不知道的引用类(本例中为ChildEntity)


也许你已经找到了问题的症结所在,但我想我还是会明白的。

我很遗憾,NHibernate做不到这一点。考虑使用另一个ORM。

< P> FLUENT是混淆的,因为您引用同一父列两次。这是不可能的。从我所看到的活动来看,修复不会很快出现


如果可能的话,您必须编写一些自定义扩展才能使其正常工作。

如果我没有弄错的话,FNH似乎很困惑,因为您似乎将同一个对象(ChildEntity)映射到两个不同的表

如果您真的不需要将两个列表分开,那么为每个列表使用一个区分值可能会解决这个问题。例如,您的第一个子实体列表将绑定到判别值A,而您将绑定到判别值B

否则,我可能会选择ChildEntity的派生类,只是不使用相同的ChildEntity名称

IList<ChildEntity> ChildEntities
IList<IncludedChildEntity> IncludedChildEntities
IList子实体
IList包含子实体
两个对象类都是相同的


如果你说它与NH一起工作,那么它可能是一个bug。但是,您可以将XML映射和自动映射与FNH混合使用。所以,如果它真的在NH起作用,这可能是我的偏好。但是我认为这个解决方法应该可以做到这一点。

如果我注释掉其中一个子元素列表,它工作正常,这样映射就知道了子元素。不过谢谢。这听起来可能无关紧要,但幽默让我们。。。我们可以看到
ChildMap
,或者与
ChildEntity
相对应的任何映射类吗?这个异常是特定于Fluent NH的,我可以说它在纯NHibernate中不存在。你可能会找到一个流利的人的答案,这可能是一个错误。有没有文档支持你的说法,它不能做到这一点?链接到“已知问题”页面或“功能请求”-等等?我相当肯定它能做到。当相关类型不同时,可以在多对多中引用相同的父列。当两个关系都属于同一类型时,这仅仅是一个限制吗?我还没有遇到这个问题。但是,当我有一个连接表并且没有对字段执行“not.Insert().not.Update()”操作时,我遇到了arg超出范围和/或缺少参数值,这就是教我只激活一个映射元素的原因。对不起,没有更多的帮助,只是自己学习nh/fnh。