我正在做一些測試使用NHibernate和我目前有兩個映射實體,訂單和產品。一如往常的訂單有產品的集合,而我映射此爲:爲什麼NHibernate刪除並重新創建集合中的所有關聯時,我添加一個項目?
<bag name="Products" cascade="all" lazy="true">
<key column ="Order_ID" />
<many-to-many class="Product" column="Product_ID" />
</bag>
和C#的一面:
public virtual IList<Product> Products
{
get { return _Products; }
set { _Products = value; }
}
private IList<Product> _Products = new List<Product>();
在我已經一個堅持的情況下訂購(約翰的訂單)在其數據庫中的一些項目在其產品集合(一個蘋果,橙子和椰子),我嘗試添加一個新項目的集合(香蕉),我可以從SQL輸出中看到Ť帽子NHibernate的是做這樣的事情:
INSERT INTO Products_Table (Product_Name, Product_ID) VALUES ('Banana', @Banana_ID)
DELETE FROM Products WHERE Order_ID = @Johns_Order_ID
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Apple_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Orange_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Coconut_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Banana_ID)
而不是簡單地做這樣的事情:
INSERT INTO Products_Table (Product_Name, Product_ID) VALUES ('Banana', @Banana_ID)
INSERT INTO Products (Order_ID, Product_ID) VALUES (@Johns_Order_ID, @Banana_ID)
那麼,爲什麼NHibernate的從產品刪除所有關聯表時,我再重新創建它們只試圖插入一個新產品?如何避免它?
在此先感謝!我試圖用inverse映射屬性來建立這個SO Question,但是即使新產品被保存了,它與訂單的關聯也不會。
編輯:
這裏是我使用修改的產品列表的代碼:
Order order = session.Load<Order>(orderId);
order.Products.Add(new Product() { Name = "Banana" });
using (ITransaction transaction = session.BeginTransaction())
{
session.Update(order);
transaction.Commit();
}
您可以顯示修改產品列表 – dotjoe
嗨的代碼,我編輯我的問題,包括我使用的是如你所說修改產品列表的代碼。 –