2010-05-29 87 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):表明更新此屬性做或需要獲取樂觀鎖。換句話說,確定當這個屬性是髒的時候是否應該發生版本增量。

相關問題