2010-01-02 28 views
1

我有一個LINQ的datacontext和的ObservableCollection拿着記錄了公司的表中的SQLWPF LINQ的DataContext刷新不在SQL數據庫表

改變當前記錄和當前的datacontext取得了新的記錄讀取新記錄( DataDC)當我做了

DataDC.SubmitChanges(); 

但是,如果我有另外一個窗口設有獨立的DataContext相同的表,如果我修改當前存在於兩個DataContexts用於記錄的字段(即公司名稱修改反映)這些變化當我做了

DataDC.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Companys); 

但是如果其他窗口/ DataContext的創建一個新的記錄,或者如果我使用SQL Explorer創建一個新的紀錄,這些新的記錄不會在DataContext.Company表即使經過

DataDC.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Companys); 

顯示我試過不同的模式。

那麼爲什麼沒有.Refresh(....)加載新記錄,但會反映對存在的記錄所做的更改?

我錯過了什麼嗎?

我看不到一種方法來刷新DC中全部來自SQL表的新數據?

回答

0

如果你在同一個應用程序中同時擁有兩個窗口,我看不到任何理由不僅僅使用一個DataContext並將原始datacontext的引用傳遞給第二個窗口。

+0

是的我一直在想,我需要這樣做,我發現有兩個datacontext到同一張表是不是一個好主意,我會這樣做。 然而,這並不能解決數據添加或刪除時的問題,購買數據庫的另一個用戶。 由於SINGLE datacontext中的緩存數據仍不會顯示外部添加的記錄。 (和刪除,他們拋出一個「excess無法刷新指定的對象。該對象不再存在於數據庫中」) – PrimeTSS 2010-01-02 00:57:31

4

Refresh()方法不會從數據庫檢索新記錄。

我不完全確定爲什麼這就是 - Linq to SQL產品團隊所做出的選擇之一(推測其原因很可能)。它可能有一些做的事實,即刷新方法

主要設計用於樂觀 併發衝突解決

爲了讓新進入的記錄,你將需要:

  • 再版同一DataContext
  • 新查詢創建一個新的實例Ø你DataContext

你去哪個選項取決於上下文(沒有雙關語意)。需要注意的是,預計的工作單元 Linq to SQL DataContext的性質和預期的短期使用期限Datacontext


  1. Dinesh's Cyberstation - 從應用程序框架團隊成員的微軟博客。
0

Appologies,我發現更多。

底層的數據上下文能夠反映出數據庫中存在的信息。

它我fualt,我認爲

DataDC.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues, Companys); 

Refreashed的 '集合'(公司的),我的意思是多數民衆贊成智能感知實際上說的。但它沒有。 但是,如果您清除集合,然後重新加載它們,如下所示,這可以工作。問題不在於數據收集,只是DataDC.Refresh不能做我認爲它做的事情。

public void LoadCompanys(ProActiveDataClassesDataContext dataDC) 
      // This loades the under lying datatables into the Observable collection 
     {    
      this.Clear(); 
      foreach (Company thisCompany in dataDC.Companies) 
      { 
       this.Add(thisCompany); 
      } 
     }