簡體   English   中英

Nhibernate不會級聯刪除

[英]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; }

這里有更多信息。

你可能要考慮的另一件事是改變bagset事業為包允許重復,如解釋在這里

並且可能使用封裝來增強您的域名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM