gpt4 book ai didi

c# - 如何保存已存在于 NHibernate session 中的临时对象?

转载 作者:太空狗 更新时间:2023-10-29 21:15:26 25 4
gpt4 key购买 nike

我有一个 Store,其中包含 Products 列表:

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,但要使用一个 transient 实体。例如,这将是来自网络浏览器的数据:

// 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);

但是,尝试这样做会给我一个错误:

a different object with the same identifier value was already associated with the session

原因是因为 store.Products 集合中已经包含一个具有相同 Id 的实体。我该如何解决这个问题?

最佳答案

而不是尝试合并 transient 实例。为什么不从实际实例开始...只需通过 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();

关于c# - 如何保存已存在于 NHibernate session 中的临时对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2703634/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com