配置文件如下:
<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语句。所以,那它倒底是级联些什么?
请各位高手指点一下。

解决方案 »

  1.   

    在<class name="Customer" table="Customers" > 里也配上 cascade="all"
      

  2.   

    @jbt202你说是这样么?<many-to-one name="Customerid" column="[CustomerID]" cascade="all"/><bag name="Orders" inverse="false" lazy="true" cascade="all"> 
        <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'。
    语句已终止。
      

  3.   

    这是Customers表,主表
    <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"/> 
      

  4.   

    级联应该是用来查询的,删除要先删从表吧?不懂hib,纯粹就是猜测。