2012-10-08 102 views
2

我試圖實現樂觀併發檢查實體框架的實體更新。我使用通用資源庫和工作模式單元。忽略時間戳

我已經介紹了時間戳的歸屬特性(如字節數組)到我的實體,每當我更新數據,自動增加值(好像是數據庫管理,這是它應該做的)。

我通過(使用automapper)的VM映射到實際模型加載從一個視圖模型的更新的值。這將導致所有的設置(包括時間戳)的根據字段正確類型的實體的一個新的(分開?)實例。

更新本身就像

i_oOldEntity = m_oDbSet.Find(i_oEntity.MaterialId) 
context.Entry(i_oOldEntity).CurrentValues.SetValues(i_oEntity) 
context.SaveChanges() 

與i_oEntity作爲automapped實體執行。

這將更新值本身很好,但是它完全忽略時間戳值從視圖模型來。生成的SQL代碼使用WHERE子句中的最新rowversion值。

總之:我如何才能從EF WHERE子句中使用我的視圖模型時間戳值?

回答

-2

請更新OriginalValues->RowVersion,你會得到天堂=)

0

假設:

var target = dbContext.Employees.Find(dto.Id); 

這種技術導致EF5在更新時,在where子句中使用DTO的時間戳值,並會引發樂觀併發如果異常DTO的時間戳不匹配數據庫中的時間戳值:

context.Entry(target).Property(o => o.Timestamp).OriginalValue = dto.Timestamp; 
context.Entry(target).Property(o => o.Timestamp).IsModified = true; 

更新OriginalValue獨行無不要在EF5中做任何事情。

相關問題