2013-08-30 64 views
1

我有一個winforms客戶端應用程序,它使用datacontext運行。 我現在遇到了一些併發問題,導致我的每個客戶端都有自己的datacontext正在運行,並且在進行更改時,它們將更改存儲在數據庫中。但是,當用戶A使Object_1一個變化,並存儲在數據庫中的變化,用戶B不能看到用戶A在object_1做出這些改變使用最新數據庫值更新DataContext

  • 我要的是,與來自值更新Object_1數據庫,每次用戶打開object_1。

我已經嘗試使用DataContext.Refresh方法,但它似乎沒有用數據庫值更新對象。 繼承人的代碼示例:

public void updateObj(object obj) 
    { 
     if (hvilken is Apartment) 
     { 
      try 
      { 
       DataContext.Refresh(RefreshMode.OverwriteCurrentValues, obj); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
     if (hvilken is Customer) 
     { 
      try 
      { 
       DataContext.Refresh(RefreshMode.OverwriteCurrentValues, obj); 
      } 
      catch (Exception ex) 
      { 
       throw ex; 
      } 
     } 
    } 

在實踐中的任何方式最好,與數據庫中的最新值更新的DataContext?

+0

請不要吞下例外。如果該代碼拋出'',它拋出*的原因* –

+0

我正在調試代碼,並且該方法不拋出異常。我的測試用例如下: 1.將值更改爲機器A上的Obj1並保存到db 2.查看機器B上的Obj1 在機器上BI現在應該看到機器A輸入的值,但我仍然得到機器A之前的「舊」值會更改該值。即使我使用刷新方法沒有任何例外:/ – grmihel

回答

1

DataContext.Refresh模式不是通用的,所以在您的特殊套管中沒有什麼好處;而空的catch只是不好的做法(這可能確實是爲什麼你不知道爲什麼它不工作:它可能試圖告訴你,但你忽略了它)。因此,在「最佳實踐」的方式,你將簡化:

public void UpdateObject(object obj) 
{ 
    DataContext.Refresh(RefreshMode.OverwriteCurrentValues, obj); 
} 

如果它不工作,它可能會throw告訴你爲什麼。

+0

嗯,我完全同意空括號是如此以往,是不好的做法。但這不是在這種情況下的捕獲,因爲我在調試模式下運行,並且該方法不會引發異常。 – grmihel

+0

但它不會更新映射到另一個表的關聯導航集合屬性。它只更新映射到當前實體指向的表的列的屬性。 Linq to Sql有沒有辦法解決這個問題? – RBT