父类的NHibernate约束关联会在子类上删除

父类的NHibernate约束关联会在子类上删除,nhibernate,inheritance,nhibernate-mapping,Nhibernate,Inheritance,Nhibernate Mapping,我认为主要的问题是子类删除了与基本映射集合相关的所有约束 使用每具体类表策略,我发现父集合与子类没有关联。在另一个(可能相关)问题中,基类和子类型之间的关联也没有创建 我有一个类似的模式: public class Parent{ public virtual Int64 Id{get; set;} public virtual IList<Foo> foos{get; set;} public virtual IList<ParentType> _p

我认为主要的问题是子类删除了与基本映射集合相关的所有约束

使用每具体类表策略,我发现父集合与子类没有关联。在另一个(可能相关)问题中,基类和子类型之间的关联也没有创建

我有一个类似的模式:

public class Parent{

   public virtual Int64 Id{get; set;}
   public virtual IList<Foo> foos{get; set;}
   public virtual IList<ParentType> _pts{get; set;}

}

public class child: Parent{
   public virtual int chilInt{get; set;}
}

public class BaseType{
   public virtual Int64 Id{get; set;}
   public virtual Parent ParentReference{get; set;}
}


public class ChildType: BaseType{
    public virtual string childBacon{get; set;}
}
公共类父类{
公共虚拟Int64 Id{get;set;}
公共虚拟IList foos{get;set;}
公共虚拟IList _pts{get;set;}
}
公共类子级:父级{
公共虚拟int chilInt{get;set;}
}
公共类基类{
公共虚拟Int64 Id{get;set;}
公共虚拟父ParentReference{get;set;}
}
公共类ChildType:BaseType{
公共虚拟字符串childBacon{get;set;}
}
映射文件

<class name="Parent" abstract="true">

<id name="Id" type="Int64" column="Id"  unsaved-value="0">
  <generator class="native"/>
</id>


<set name="foos" inverse="false"  >
  <key column="Id"/>
  <one-to-many class="Foo" />
</set>


<set name="pts" inverse="false"  >
  <key column="Id"/>
  <one-to-many class="ParentType" />
</set>


</class>

<union-subclass name="Child" table="Child" extends="Parent">
     <property name="childInt" type="int" />
</union-subclass>


<class name="ParentType" abstract="true">

  <id name="Id" type="Int64" column="Id"  unsaved-value="0">
   <generator class="native"/>
  </id>

 <many-to-one name="ParentReference" class="Parent"/>

</class>

<union-subclass name="ChildType" table="ChildType" extends="ParentType">
     <property name="childBacon" type="string" />
</union-subclass>


结果是子表与foo表没有任何关系。

好吧,ORM和继承有三种常见的方法(每个类层次结构的表、每个子类的表、每个具体类的表)<代码>,您使用的一个,在每个具体类的表中使用,它应该嵌入到父类中。了解它(8.1.5)


也许它不能解决您所有的问题,但至少它应该有助于为继承建立映射。

好的,ORM和继承有三种常见的方法(表/类层次结构、表/子类、表/具体类)<代码>,您使用的一个,在每个具体类的表中使用,它应该嵌入到父类中。了解它(8.1.5)

也许它不能解决您所有的问题,但至少它应该有助于建立继承映射。

如果使用映射,很明显foo条目与子表之间没有直接关系,因为子表只包含子类中声明的其他内容

当使用union子类映射实例化子实例时,在父表和子表中都会得到一行。如果您的子实例包含foo集中的条目,那么您将在foo表中获得一些与父表相关的行

对于指向父类的关联,使用每个具体类的表映射没有意义(正如代码示例中不包含的foo类所做的那样)因为父表的不同派生类都继承了foo集,但是foo表不能有所有这些表的外键。

如果使用映射,很明显foo条目与子表之间没有直接关系,因为子表只包含子类中声明的其他内容

当使用union子类映射实例化子实例时,在父表和子表中都会得到一行。如果您的子实例包含foo集中的条目,那么您将在foo表中获得一些与父表相关的行


对于指向父类的关联,使用表/具体类映射是没有意义的(因为foo类似乎不属于代码示例的一部分),因为父类的不同派生类都继承了foo集,但foo表不能具有指向所有这些表的外键。

您能更具体一点吗?问题是什么还不清楚。(另外还有一些明显的问题,比如使用'ref'作为名称。你的代码不会编译,除非你不使用C:))谢谢你,我已经做了一些更改和更正,我希望这能更好地解释我的疑问,任何更多的建议都将不胜感激:)你能更具体一点吗?问题是什么还不清楚。(另外还有一些明显的问题,比如使用'ref'作为名称。你的代码不会编译,除非你不使用C:))谢谢,我已经做了一些更改和更正,希望这能更好地解释我的疑问,任何更多的建议都将不胜感激:)事实上你可以像你看到的那样滑动映射文件事实上你可以像你看到的那样滑动映射文件谢谢这个伟大的答案你帮助我了解更多关于NHibernate的信息。谢谢这个伟大的答案你帮助我了解更多关于NHibernate的信息。