[英]How do I save a transient object that already exists in an NHibernate session?
我有一個包含Products
列表的Store
:
var store = new Store();
store.Products.Add(new Product{ Id = 1, Name = "Apples" };
store.Products.Add(new Product{ Id = 2, Name = "Oranges" };
Database.Save(store);
現在,我想編輯其中一個Products
,但是要使用瞬態實體。 例如,這將是來自Web瀏覽器的數據:
// this is what I get from the web browser, this product should
// edit the one that's already in the database that has the same Id
var product = new Product{ Id = 2, Name = "Mandarin Oranges" };
store.Products.Add(product);
Database.Save(store);
但是,嘗試這樣做會給我一個錯誤:
具有相同標識符值的不同對象已與會話關聯
原因是因為store.Products
集合已經包含具有相同Id的實體。 我該如何解決這個問題?
而不是嘗試合並瞬態實例。 為什么不從實際實例開始...只需通過id獲取產品,更新字段並提交。
var product = session.Get<Product>(2);
product.Name = "Mandarin Oranges";
tx.Commit();
或合並方式......
var product = new Product{ Id = 2, Name = "Mandarin Oranges" };
var mergedProduct = (Product) session.Merge(product);
tx.Commit();
在沒有更多上下文的情況下,我不是100%肯定,但會話合並可能有效。
http://ayende.com/Blog/archive/2009/11/08/nhibernate-ndash-cross-session-operations.aspx
也許你應該調用Database.SaveOrUpdate(store); 而不是純粹的保存(商店)?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.