NHibernate映射未将删除级联选项添加到外键引用

NHibernate映射未将删除级联选项添加到外键引用,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,这是我的NHibernate映射 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HelloNHibernate" namespace="HelloNHibernate"> <class name="Showing" table="showing"> <id name="Id" col

这是我的NHibernate映射

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="HelloNHibernate" namespace="HelloNHibernate">
  <class name="Showing" table="showing">
    <id name="Id" column="showing_id">
      <generator class="identity"/>
    </id>
    <many-to-one class="Theater" name="Theater" column="theater_id" foreign-key="fk_showing_theater_theater_id" cascade="delete" lazy="false" fetch="join"/>
    <many-to-one class="Movie" name="Movie" column="movie_id" foreign-key="fk_showing_movie_movie_id" cascade="delete" lazy="false" fetch="join" />
  </class>
</hibernate-mapping>

我做错了什么?谢谢

NHibernate的级联设置不生成级联外键。它控制刷新会话时NHIBenerate将采取的操作


此外,关系的多个方面将删除级联到一个方面是非常罕见的。删除放映时,您的映射将删除相关的电影和影院。

NHibernate只能在删除级联上生成
对反向集合的约束

您的域的示例:

<class name="Movie">
  ...
  <bag name="Showings" inverse="true" cascade="all">
    <key column="Foo" on-delete="cascade" /><!--Here's the magic-->
    <one-to-many class="Showing" />
  </bag>
</class>

...

为了补充公认的答案,以下是使用Fluent NHibernate的方法:

public class MovieMap : ClassMap<Movie>
{
     public MovieMap()
     {
         ...
         HasMany(c => c.Showings)
              .Inverse()
              .KeyColumn("Foo")
              .Cascade.All()
              .ForeignKeyCascadeOnDelete() // here's the magic
              .ForeignKeyConstraintName("FK_Movie_Showing"); // this is optional - name is autogenerated otherwise
公共类电影地图:类地图
{
公共电影地图()
{
...
有很多(c=>c.展示)
.Inverse()
.KeyColumn(“Foo”)
.Cascade.All()
.ForeignKeyCascadeOnDelete()//这就是神奇之处
.ForeignKeyConstraintName(“FK_电影放映”);//这是可选的-否则名称将自动生成

我目前正在搜索我的级联删除不起作用的原因。每次我找到答案时,都需要一行代码;-)
public class MovieMap : ClassMap<Movie>
{
     public MovieMap()
     {
         ...
         HasMany(c => c.Showings)
              .Inverse()
              .KeyColumn("Foo")
              .Cascade.All()
              .ForeignKeyCascadeOnDelete() // here's the magic
              .ForeignKeyConstraintName("FK_Movie_Showing"); // this is optional - name is autogenerated otherwise