2010-01-02 45 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); 
      } 
     }