我有实现接口ILockable
的类。
这些类在我的数据库中使用NHibernate进行映射。
我想更新数据库中存在的那些类的所有对象并实现此接口。 现在我这样做:
using (var session = SomeRandomMethodThatReturnsAHibernateSession())
{
using (var transaction = session.BeginTransaction(IsolationLevel.ReadCommitted))
{
try
{
session.Query<ILockable>()
.UpdateBuilder()
.Set(x => x.LockedBy, x => null)
.Set(x => x.LockedAt, x => null)
.Set(x => x.IsLocked, x => false)
.Update();
transaction.Commit();
}
catch (Exception ex)
{
transaction.Rollback();
}
}
}
此代码正常运行但NHibernate在内部记录警告:
11:13:32 WARN: manipulation query [UPDATE .Select[SomeRandomNamespace.ILockable,System.Collections.Generic.Dictionary`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKey
Token=b77a5c561934e089],[System.Object, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]](NHibernate.Linq.NhQueryable`1[SomeRandomNamespace.ILockable], Quote((,
) => (new Dictionary`2(Equal(, NULL) ? 4 : 4, )LockedByNULLLockedAtNULLIsLockedFalse)), )] resulted in [28] split queries
我做的是“错误的”或不是最佳做法吗?我该如何避免这种警告?
答案 0 :(得分:0)
我猜你正在创建一个继承另一个模型对象的模型对象,Hibernate感到困惑并导致多个查询