【发布时间】:2014-02-14 19:37:55
【问题描述】:
我正在尝试更新表中的单个列。没有发布任何更新(使用 SQL Profiler 检查)。没有错误。
- 类映射有
dynamic-update="true"。 - 没有在类上启用版本控制。
- 刷新模式提交。
- 属性映射没有任何插入/更新修饰符 (
<property name="Deleted" />)。 - 属性是自动实现的 (
public virtual bool Deleted { get;set;})。 -
NH 3.3.0、.NET 4、x64。
using (var transaction = this._session.BeginTransaction()) { try { var order = this.session.Load<Order>(id); order.Deleted = true; this._session.Update(order); transaction.Commit(); } catch (Exception) { transaction.Rollback(); throw; } }
【问题讨论】:
-
如果你在事务提交行中断,_session.IsDirty() 是真的吗? Deleted 是自动属性还是有支持字段?而且您不需要在会话中调用 Update,但我怀疑这是问题
-
你也在使用版本控制吗?
-
我们无法猜测
Repository.Load里面的内容。请将该行替换为var order = _session.Get<Order>(id)。这样,_session.Update就不需要了。您也不必手动回滚事务。 -
@DiegoMijelshon 我的错,请参阅更新后的问题。 Get 的问题在于它执行查询以获取实体;我正在努力做到这一点,以便为单个列发出单个 UPDATE 而没有 SELECT。
-
您使用两个不同的
sessions(session和_session)这一事实可能是问题的根源。
标签: c# sql .net nhibernate