2013-12-12 55 views
0

對於併發控制我在我的Context類中編寫「VersionCheck」函數,我需要動態加載Context對象並檢查版本是否與當前上下文對象RowVersion相同。現在我使用switch語句。 (代碼如下) 還有,是否有更方便的版本控制方式?實體框架使用「時間戳」值檢查的併發控制

p.s. RowVersion是數據庫中的TimeStamp類型。

public class SchoolContext : DbContext 
    { 
    public DbSet<Group> Groups { get; set; } 
    public DbSet<Person> Persons { get; set; } 

    public bool VersionCheck(string objName) 
    { 
     var dbc = new SchoolContext(); 
     byte[] bt1 = null; 
     byte[] bt2 = null; 

     switch (objName) 
     { 
      case "Person": 
       dbc.Persons.Load(); 
       bt1 = dbc.Persons.SingleOrDefault(p => p.Id == 1).RowVersion; 
       bt2 = this.Persons.Local.SingleOrDefault(p => p.Id == 1).RowVersion; 
       break; 
      case "Group": 
       dbc.Groups.Load(); 
       bt1 = dbc.Groups.SingleOrDefault(p => p.Id == 1).RowVersion; 
       bt2 = this.Groups.Local.SingleOrDefault(p => p.Id == 1).RowVersion; 
       break; 
     } 

     if (bt1 == null && bt2 == null) 
     { 
      throw new Exception("One of the Variable is null!"); 
      return true; 
     } 
     for (int i = 0; i < bt1.Length; i++) 
     { 
      if (bt1[i] != bt2[i]) 
      { 
       MessageBox.Show("Current object changed!"); 
       return false; 
      } 
     } 
     return true; 
    } 

} 
+0

你看過嗎? http://stackoverflow.com/a/6554939/5984 – idursun

+0

你想達到什麼目的?爲什麼你有2個獨立的數據庫上下文?您是否使用ConcurrencyCheckAttribute作爲時間戳,或者這是一種自定義解決方案?如果是的話,你的目標又是什麼? –

+0

對不起,這是我的錯誤。我編輯了代碼。只有SchoolContext。 – sdkarm

回答