NHibernate将“ON-DELETE”选项设置为RESTRICT而不是CASCADE

时间:2012-10-31 09:49:07

标签: c# mysql nhibernate

我在两张桌子之间有多对一的关系 - 患者和研究。 当患者被删除时,我希望他的所有研究也将被删除。 hbm.xml 文件中的相关行是:

<class name="Study" table="Studies">
        <id name="Uid">
            <generator class="guid"/>
        </id>
        <many-to-one name="Patient" class="Patient" column="PatientId" lazy="false" cascade="all"/>
</class>

<class name="Patient" table="Patients">
    <id name="Uid">
      <generator class="guid"/>
    </id>
    <property name="PatientId"/>
    <property name="Name" />
</class>

我正在使用 NHibernate 3.3.1 MySQL服务器。 通过设置cascade=all,我希望在 MySQL 工作台中看到FK选项On Delete将设置为CASCADE,而是设置为RESTRICT }。 当我手动将其更改为CASCADE(通过工作台)时,一切正常。 有没有办法自动将其设置为CASCADE?我还尝试在 hbm.xml 文件中设置on-delete=cascade,但它不起作用。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

首先,删除父项时自动删除子项的语法是......

  • cascade="all-delete-orphan"(如果你想要所有和孤儿删除)。 NHibernate将遍历内存中的子项并删除它们。

    密钥
  • on-delete="cascade" 。数据删除将发生在数据库端。

但是,在您的情况下,您尝试在many-to-one映射上执行此操作。我不认为这是可能的。 AFAIK - 仅适用于one-to-many映射。

解决此问题

  • 您可以手动添加脚本以在数据库级别添加级联删除(您已经完成)

  • 将关系更改为双向