出于性能原因,有时我想更新实体而不进行任何版本增量(或版本检查)。使用LINQ TO SQL,我只是保持版本不变,它工作正常。这种行为在NHibernate中是否可行?
答案 0 :(得分:1)
有些修改不是 非常重要所以我想做 这些修改只是最后一个 取胜。
虽然交易意味着原子,所以我们可以用时间顺序来说话,但这并不简单,而且当涉及交易时,谈论第一个/最后一个总是有点棘手。 E.g。
T1: start
T1: read row X with value A
T2: start
T2: read row X with value A
T2: write row X with value A2
T2: commit
T1: write row X with value A1
T1: commit
T2在T1之后启动,但更改A2丢失。哪个交易是“最后一个”?最后开始的那个,还是最后一个? (提交实际上是原子的,但事务仍有持续时间,这使得它们很难推理。)
乐观或悲观的锁定意味着避免这种情况,这样我们就可以更好地考虑交易顺序。
那就是说,回到你的问题,如果这真的是你想要的,你可以尝试在两个实体中两次映射相同的数据库表:在一个实体中你有@version
而另一个没有。{但这可能相当令人困惑。
答案 1 :(得分:0)
我相信您可能不希望禁用对这些实体的所有乐观锁定(否则只是不给它们一个版本属性),但是您希望某些属性不会导致版本增加。使用“optimistic-lock”支持,检查:http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property
optimistic-lock(可选 - 默认为true):指定对此属性的更新是否需要获取乐观锁。换句话说,确定此属性为脏时是否应发生版本增量。