NHibernate引用任何回拉错误类型的操作

NHibernate引用任何回拉错误类型的操作,nhibernate,fluent,Nhibernate,Fluent,我有一个名为AdministratorPrivileges的表,它有以下字段: 身份证件 列表项 MemberId 价值 成员类型 现在,成员可以是Enterprise和Express两种类型。企业成员位于企业表中。Express成员位于expressmember表中。我试着这样做我的流畅映射 public class AdministratorPrivilegesMapping : ClassMap<AdministratorPrivileges> { pu

我有一个名为AdministratorPrivileges的表,它有以下字段:

身份证件 列表项 MemberId 价值 成员类型 现在,成员可以是Enterprise和Express两种类型。企业成员位于企业表中。Express成员位于expressmember表中。我试着这样做我的流畅映射

public class AdministratorPrivilegesMapping : ClassMap<AdministratorPrivileges>
    {
        public AdministratorPrivilegesMapping()
        {
            Id(x=>x.Id);
            Map(x => x.Value).Column("Value");
            ReferencesAny(x => x.Member)
                .EntityTypeColumn("MemberType")
                .EntityIdentifierColumn("MemberId")
                .IdentityType<Int32>()
                .AddMetaValue<ExpressMember>("Express")
                .AddMetaValue<Member>("Enterprise");

        }
    }
两个成员表都有带升序值的整数ID。当我试图撤回与enterprise member 10关联的权限时,我将获得与Express member 10关联的权限集。其他两个表都使用旧式hbm映射文件进行映射


我错过了什么明显的东西吗?我使用的是NHibernate 2.1和FluentNhibernate 1.1,就像我在Stackoverflow上发表文章时经常出现的情况一样,我是一个十足的傻瓜,错过了一些显而易见的东西,这些东西通过晚上的良好休息和一些咖啡因让自己清醒过来。我需要研究ExpressMember和Member类的映射。结果表明,那里的包声明没有按对象的类型进行适当过滤。起初,我以为我已经做出了突破性的改变,而实际上这是一个非常古老的问题。两种不同类型的成员之间的id号冲突在很长一段时间内都不是问题,因为express成员通常拥有所有权限或没有权限,大多数老会员也是这样,他们最初是在管理员/普莱贝计划下创建的,后来特权被打破。

当我在Stackoverflow上发帖时,似乎总是这样,我是一个十足的傻瓜,错过了一些显而易见的东西,这些东西会通过晚上的休息和一些咖啡因来清理自己。我需要研究ExpressMember和Member类的映射。结果表明,那里的包声明没有按对象的类型进行适当过滤。起初,我以为我已经做出了突破性的改变,而实际上这是一个非常古老的问题。两种不同类型的成员之间的id号冲突在很长一段时间内都不是问题,因为express成员通常拥有所有权限或没有权限,大多数较老的成员也是这样,他们首先是在admin/plebe方案下创建的,以后会有特权被释放。

我实际上是使用.Where找到了解决方案。 我的情况有点不同,我有objectA和objectB。 objectA包含objectB,但objectB也包含objectB的集合

反对意见a:{ someProp:string, 反对意见b:{ someProp:string, 科梅科尔:[ 反对意见 ] } }

因此objectB的父属性可以是objectB或objectA类型,这就是为什么我需要在objectB的映射中使用ReferencesAny

映射看起来像

        ReferencesAny( x => x.Parent )
            .IdentityType< int >()
            .MetaType< string >()
            .EntityTypeColumn( "ParentType" )
            .EntityIdentifierColumn( "ParentId" )
            .AddMetaValue< objectA >( "E" )
            .AddMetaValue< objectB >( "S" )
            .Access.Property()
            .LazyLoad()
            .Cascade.All();

希望它能帮助同样情况下的任何人:

我实际上使用.Where找到了解决方案。 我的情况有点不同,我有objectA和objectB。 objectA包含objectB,但objectB也包含objectB的集合

反对意见a:{ someProp:string, 反对意见b:{ someProp:string, 科梅科尔:[ 反对意见 ] } }

因此objectB的父属性可以是objectB或objectA类型,这就是为什么我需要在objectB的映射中使用ReferencesAny

映射看起来像

        ReferencesAny( x => x.Parent )
            .IdentityType< int >()
            .MetaType< string >()
            .EntityTypeColumn( "ParentType" )
            .EntityIdentifierColumn( "ParentId" )
            .AddMetaValue< objectA >( "E" )
            .AddMetaValue< objectB >( "S" )
            .Access.Property()
            .LazyLoad()
            .Cascade.All();
希望它能帮助处于同样情况的任何人: