2016-04-28 72 views
0

我設計了一個WPF應用程序,使用實體框架進行數據持久化。所有與數據庫的交互都是通過Entity Framework基礎結構完成的。C#實體框架:檢查和執行邏輯(多個用戶)

我想檢查一個特定實體的布爾屬性,如果它是假的,對這個實體和相關實體執行一些邏輯。但是,該應用程序在多用戶環境中使用,因此代碼可能會通過檢查(即布爾屬性可能爲false),但另一個用戶可以截取並且只保存最新用戶的更改(按樂觀併發)。

如何將檢查和更新包裝到實體和相關實體中,以使所有代碼都得到執行或者沒有任何代碼?我知道交易可能是解決這個問題的方法嗎?如果是這樣,這些在Entity Framework中如何實現?

謝謝!

+0

是否有可能在執行其餘邏輯之前更新決定屬性? –

回答

2
using (var context = new YourContext()) 
      { 
       using (var dbContextTransaction = context.Database.BeginTransaction()) 
       { 
        try 
        { 
         //Your logic here 
         context.SaveChanges(); 

         dbContextTransaction.Commit(); 
        } 
        catch (Exception) 
        { 
         dbContextTransaction.Rollback(); 
        } 
       } 
      } 
+0

請不要忘記投票,如果它可以幫助你 – suulisin

+0

這是伎倆,非常感謝!在我標記爲接受的答案之前,我選擇了一些有趣的行爲。當我在事務中間放置一個斷點來故意創建衝突時,其他用戶將'掛起'context.SaveChanges(),直到服務器超時。我寧願不要混淆當前的超時限制。有沒有一些策略可以提供一個事務處理,並取消/移出context.SaveChanges()爲遇到「掛起」的用戶? –

+0

我不理解你,但你可以檢查這個交易對象如果(Transaction.Current.TransactionInformation.Status == TransactionStatus.Committed) { //重定向 } – suulisin