2010-05-29 85 views
1

由于性能方面的原因,有时候我想更新实体而没有任何版本增量(或版本检查)。使用LINQ TO SQL,我只是保持版本不变并且工作正常。这种行为在NHibernate中可行吗?NHibernate - 有没有办法来防止版本增量?

+0

但是,这不是有点击败版本领域的点? “我希望有一个领域能够随着每一个变化自动更新,哦,顺便说一下,我不希望它随着*每一个变化而更新。” – 2010-05-29 19:11:40

+0

是否确定此版本检查导致您的性能问题? – Amitabh 2010-05-29 19:14:34

+0

我对此表示怀疑。版本的重点在于乐观锁定。说“请不要版本更改”就像说“我完全相信没有人正在同时修改实体”,我不认为你可以告诉NHibernate。 – ewernli 2010-05-29 23:56:20

回答

1

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

虽然交易的意思是原子,这样我们就可以按照时间顺序的长远讲,它不是简单的,它总是有点棘手交易涉及时候说话第一/最后的。例如。

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,而在其他实体中则不是。但这可能会让人困惑。

0

我相信你可能不想禁用对这些实体的所有乐观锁定(否则只是不给它们一个版本属性),但你想要一些属性不会导致版本增加。这是用“乐观锁”支持,请参考:http://nhibernate.info/doc/nh/en/index.html#mapping-declaration-property

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

相关问题