【发布时间】:2013-02-19 06:16:02
【问题描述】:
我有一个我想更新的临时对象列表,所有这些都来自同一个表。
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.Update(obj) 后调用 session.Flush()
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();
}
或
2) 调用 session.Merge(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()
}
但是,我想了解为什么在多次更新调用后提交事务时抛出异常,而不在每次更新后刷新。
谁能解释一下?
【问题讨论】:
-
什么关系型数据库?哪个 NHibernate 版本?
-
Sybase ASE 15.5 和 NHibernate 3.3.2.4000
标签: nhibernate