Допустим, у меня есть такая сущность:
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;
}
Но, к сожалению, для этого требуется вручную копировать каждыйсобственность от десериализованного объекта к персистентному.Есть ли более простой или лучший способ сделать это?