我有一個我想更新的瞬態對象的列表,全部來自同一張表。NHibernate更新多個瞬態對象異常:脫水屬性值的錯誤
IList<MyObject> objectsToUpdate = GetObjectsToUpdate();
using (var session = GetSession())
using (var transaction = session.BeginTransaction())
{
foreach (var obj in objectsToUpdate)
{
obj.Property = "new value";
session.Update(obj);
}
transaction.Commit(); //exception thrown here
}
異常消息:錯誤脫水屬性值MyObject.Property 內部異常消息:字符串值的長度超過在映射/參數配置的長度。
異常消息沒有意義,因爲映射中沒有長度配置,並且字符串在該範圍內。
我能夠來解決這個問題:
1)調用調用Session.flush()調用session.Update後(OBJ)
IList<MyObject> objectsToUpdate = GetObjectsToUpdate();
using (var session = GetSession())
using (var transaction = session.BeginTransaction())
{
foreach (var obj in objectsToUpdate)
{
obj.Property = "new value";
session.Update(obj);
session.Flush();
}
transaction.Commit();
}
OR
2)呼叫會話。合併(obj),修改其屬性,然後一次全部提交。
IList<MyObject> objectsToUpdate = GetObjectsToUpdate();
using (var session = GetSession())
using (var transaction = session.BeginTransaction())
{
foreach (var obj in objectsToUpdate)
{
obj = session.Merge(obj);
obj.Property = "new value";
}
transaction.Commit()
}
不過,我想知道爲什麼在提交事務時多更新調用後沒有每次更新後沖洗異常被拋出。
有人能解釋一下嗎?
什麼RDBMS?哪個NHibernate版本? – 2013-02-19 08:16:08
Sybase ASE 15.5和NHibernate 3.3.2.4000 – minh 2013-02-19 14:12:49