NHibernate-有没有办法防止版本增加?

NHibernate-有没有办法防止版本增加?,nhibernate,Nhibernate,出于性能原因,有时我希望在不增加任何版本(或版本检查)的情况下更新实体。使用LINQtoSQL,我只是保持了版本不变,它工作得很好。这种行为在NHibernate中可能吗 有些修改是不正确的 真的很重要。所以我想 这些修改只是最后一个修改 赢 虽然事务是原子的,所以我们可以用时间顺序来表示,但这并不简单,而且当涉及事务时,谈论第一个/最后一个总是有点棘手。例如 T1: start T1: read row X with value A T2: start T2: read row X with

出于性能原因,有时我希望在不增加任何版本(或版本检查)的情况下更新实体。使用LINQtoSQL,我只是保持了版本不变,它工作得很好。这种行为在NHibernate中可能吗

有些修改是不正确的 真的很重要。所以我想 这些修改只是最后一个修改 赢

虽然事务是原子的,所以我们可以用时间顺序来表示,但这并不简单,而且当涉及事务时,谈论第一个/最后一个总是有点棘手。例如

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
,另一个实体中没有。但这可能相当令人困惑

有些修改是不正确的 真的很重要。所以我想 这些修改只是最后一个修改 赢

虽然事务是原子的,所以我们可以用时间顺序来表示,但这并不简单,而且当涉及事务时,谈论第一个/最后一个总是有点棘手。例如

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
,另一个实体中没有。但这可能会让人困惑。

我相信您可能不想禁用这些实体上的所有乐观锁定(否则就不给它们版本属性),但希望某些属性不会导致版本增加。使用“乐观锁”支持的,请检查:

乐观锁(可选-默认为true):指定此属性的更新是否需要获取乐观锁。换句话说,确定当此属性为脏时是否应发生版本增量


我相信您可能不想禁用这些实体上的所有乐观锁定(否则就不要给它们一个version属性),但是您希望某些属性不会导致版本增加。使用“乐观锁”支持的,请检查:

乐观锁(可选-默认为true):指定此属性的更新是否需要获取乐观锁。换句话说,确定当此属性为脏时是否应发生版本增量


但这不是有点违背了版本领域的观点吗?“我想要一个随每次更改自动更新的字段。哦,顺便说一下,我不希望它随每次更改而更新。”你确定此版本检查会导致性能问题吗?我对此表示怀疑。该版本的要点是乐观锁定。说“请不要修改此更改”就像说“我完全相信没有其他人同时修改该实体”,我认为您不能告诉NHibernate。很抱歉,我说错了。这不是关于性能,而是关于并发性。我有一些经常被修改的实体。有些修改并不重要。所以我想让这些修改仅仅是最后一场胜利。但是其他一些修改很重要,所以我需要乐观的锁定行为。换句话说,我想避免不必要的并发冲突。但这不是有点违背了版本域的观点吗?“我想要一个随每次更改自动更新的字段。哦,顺便说一下,我不希望它随每次更改而更新。”你确定此版本检查会导致性能问题吗?我对此表示怀疑。该版本的要点是乐观锁定。说“请不要修改此更改”就像说“我完全相信没有其他人同时修改该实体”,我认为您不能告诉NHibernate。很抱歉,我说错了。这不是关于性能,而是关于并发性。我有一些经常被修改的实体。有些修改并不重要。所以我想让这些修改仅仅是最后一场胜利。但是其他一些修改很重要,所以我需要乐观的锁定行为。换句话说,我希望避免不必要的并发冲突。