配置文件如下:
<class name="Customer" table="Customers" >
<id name="Customerid" column="[CustomerID]" type="string">
<!--<generator class="native" />-->
<!--<generator class="assigned" />-->
</id> ....... <bag name="Orders" inverse="true" lazy="true" cascade="all">
<key column="[CustomerID]" />
<one-to-many class="Order" />
</bag>
</class>我想问题下在one-to-many时用NHibernate级联时,它是给级联些什么东西?我做一次删除父表(Customers)数据的操作,得先把Customers的记录取出来,然后再把相应记录从子表(Orders)中取出来,再然后把Orders数据删掉,最后再把Customers数据删掉。
难道cascade="all" 不应该是只需要删除Customers数据,NHibernate会自动关联子表数据并删掉吗?也就是说只需一个session.Delete(Customer);语句就删除所有关联的数据。但我直接session.Delete(Customer);的时候数据库会报一个外键冲突的错误。也就是说NHibernate并没用自动生成删除子表关联数据的SQL语句。所以,那它倒底是级联些什么?
请各位高手指点一下。
<class name="Customer" table="Customers" >
<id name="Customerid" column="[CustomerID]" type="string">
<!--<generator class="native" />-->
<!--<generator class="assigned" />-->
</id> ....... <bag name="Orders" inverse="true" lazy="true" cascade="all">
<key column="[CustomerID]" />
<one-to-many class="Order" />
</bag>
</class>我想问题下在one-to-many时用NHibernate级联时,它是给级联些什么东西?我做一次删除父表(Customers)数据的操作,得先把Customers的记录取出来,然后再把相应记录从子表(Orders)中取出来,再然后把Orders数据删掉,最后再把Customers数据删掉。
难道cascade="all" 不应该是只需要删除Customers数据,NHibernate会自动关联子表数据并删掉吗?也就是说只需一个session.Delete(Customer);语句就删除所有关联的数据。但我直接session.Delete(Customer);的时候数据库会报一个外键冲突的错误。也就是说NHibernate并没用自动生成删除子表关联数据的SQL语句。所以,那它倒底是级联些什么?
请各位高手指点一下。
<key column="[CustomerID]" />
<one-to-many class="Order" />
</bag> 可是这样也不行,<many-to-one>端配置cascade="all" 或者 cascade="none"都没用,还是报
NHibernate.HibernateException : An exception occurred when executing batch queries
----> System.Data.SqlClient.SqlException : DELETE 语句与 REFERENCE 约束"FK_Orders_Customers"冲突。该冲突发生于数据库"Northwind",表"dbo.Orders", column 'CustomerID'。
语句已终止。
<bag name="Orders" inverse="false" lazy="true" cascade="all">
<key column="[CustomerID]" />
<one-to-many class="Order" />
</bag>Orders表,从表
<many-to-one name="Customerid" column="[CustomerID]" cascade="all"/>