【发布时间】:2010-09-15 23:03:42
【问题描述】:
假设我有一个这样的实体:
public class Product
{
public virtual int Id { get; set; }
public virtual int Name { get; set; }
}
客户想要更新特定产品的名称,因此他将此 JSON 发送回 ASP.NET 服务器:
{
"Id": 1,
"Name": "Updated Product Name"
}
然后我运行这段代码来尝试保存它:
var jsonString = GetJsonStringFromRequestBody();
var product = JsonNet.Deserialize<Product>(jsonString);
using (var session = SessionFactory.OpenSession())
{
session.Update(product);
}
不幸的是,我得到了以下异常:
NHibernate.StaleObjectStateException:行已被另一个事务更新或删除(或未保存值映射不正确)
现在,我可以改用以下代码:
var jsonString = GetJsonStringFromRequestBody();
var productToUpdate = JsonNet.Deserialize<Product>(jsonString);
using (var session = SessionFactory.OpenSession())
{
var productFromDB = session.Linq<Product>().Single(x => x.Id == productToUpdate.Id);
productFromDB.Name = productToUpdate.Name;
}
但不幸的是,这需要手动将每个属性从反序列化实体复制到持久实体。有没有更简单或更好的方法?
【问题讨论】:
标签: nhibernate json serialization crud