[英]Nhibernate doesnt cascade delete
我有一個非常簡單的問題與nhibernate(我剛開始使用它)
我有以下hbm映射文件:
<class name="Customer" table="Customers" lazy="false">
<id name="Id" column="CustomerId">
<generator class="native">
</id>
<property name="Name" />
<property name="Picture" type="BinaryBlob" />
<bag name="Orders" cascade="all-delete-orphan" lazy="false">
<key column="CustomerId" />
<one-to-many class="Order" />
</bag>
</class>
<class name="Order" table="Orders" lazy="false">
<id name="Id" column="OrderId">
<generator class="native">
</id>
<property name="Name" />
<property name="Picture" type="BinaryBlob" />
<bag name="Products" cascade="all-delete-orphan" lazy="false"
<key column="OrderId" />
<one-to-many class="Product" />
</bag>
</class>
<class name="Product" table="Products" lazy="false">
<id name="Id" column="ProductId">
<generator class="native">
</id>
<property name="Name" />
<property name="Picture" type="BinaryBlob" />
<property name="ProductStr" />
</class>
Customer類有一個int id,字符串名稱,byte []圖片和Orders的IList。
Order類有一個int id,string name,byte []圖片和IList of Products。
Product類有一個int id,string name,byte [] picture,string productstr和int quantity(我目前不使用)
客戶表具有客戶ID,名稱和圖片(varbinary(max))。
訂單包含訂單ID,名稱,圖片和客戶ID
產品有產品ID,名稱,圖片,產品和訂單ID。
問題:當我使用session.Delete(csCustomer)刪除客戶時,它會成功地從數據庫中刪除整個客戶,但它不會刪除所有訂單。 它僅在已刪除客戶的所有訂單中的客戶ID字段中放置null。
任何人都可以找到我的配置問題? 我看到了一個使用nhibernate的例子,他們在訂單類中保存了對客戶的引用,並在產品類中引用了訂單,我需要做些什么來修復它?
你必須在你的包上設置inverse="true"
。
您的客戶映射應如下所示:
<class name="Customer" table="Customers" lazy="false">
<id name="Id" column="CustomerId">
<generator class="native">
</id>
<property name="Name" />
<property name="Picture" type="BinaryBlob" />
<bag name="Orders" cascade="all-delete-orphan" inverse="true" lazy="false">
<key column="CustomerId" />
<one-to-many class="Order" />
</bag>
</class>
有一個關於該物業的好文章在這里和Ayende已經寫很久以前的事了。
我建議您擴展引用您的客戶的訂單映射添加:
<many-to-one name="Customer" column="CustomerId" not-null="true"/>
並將虛擬屬性添加到您的類:
public virtual Customer Customer { get; set; }
這里有更多信息。
你可能要考慮的另一件事是改變bag
用set
事業為包允許重復,如解釋在這里 。
並且可能使用封裝來增強您的域名。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.