我有一個類人映射到NHibernate的數據庫。 我從DB加載對象並將其發送給不同的客戶端。 第一個客戶將修改名稱和國家屬性。 第二個客戶端將只修改Name屬性。 然後這兩個返回修改對象到服務器。 當我從第一個客戶端保存數據 - 然後正確保存,名稱和國家都更新。 當我從第二個客戶端保存數據時 - 我遇到問題。它是從第一個客戶的覆蓋數據,並保存國家的新名稱和初始值。我如何告訴NHibernate只保存更改的屬性
我如何告訴NHibernate只保存Name值並且不覆蓋Country值?
public class Person
{
public string Name { get; set; }
public string Country { get; set; }
}
public static List<Person> GetEntities()
{
var factory = CreateSessionFactory();
using (ISession session = factory.OpenSession())
{
return session.CreateCriteria<Person>().List<Person>();
}
}
public static void SaveEntities(List<Person> entities)
{
var factory = CreateSessionFactory();
using (ISession session = factory.OpenSession())
{
using (var t = session.BeginTransaction())
{
foreach (var person in entities)
{
session.Merge(person);
}
t.Commit();
}
}
}
P.S:對不起我的英文不好
謝謝Stefan。我可以從第二個客戶端的對象原始狀態發回來檢測對象中的變化,並只保存修改過的屬性。 – gagabu 2011-06-08 10:57:48
重要的是要注意,只有在OP與分離的實體一起工作的情況下,這個答案纔是真實的。如果有人使用從當前會話加載的實體,則NHibernate可以只更新已更改的屬性,方法是在其'class'聲明中啓用'dynamic-update',將這些實體映射爲[由rebelliard](/ a/6271210/1178314) 。 – 2017-05-24 10:09:33