我的应用程序是使用ADO.NET数据服务的客户端/服务器解决方案。数据服务公开transactionSummaryData,如下所示:
public IQueryable<TransactionSummary> TransactionSummaries
{
get { return MainForm.transactionSummaryData.Items.AsQueryable(); }
}
transactionSummaryData的类型为TransactionSummaries,其items属性定义如下:
public List<TransactionSummary> Items
在客户端,我有一些控件数据绑定到LINQ查询,该查询适用于TransactionSummaries:
AvailibilityBox.DataContext = (from salesdata in srv.TransactionSummaries
where salesdata.PerformanceID == selectedshow.performancedata.PerformanceID
select salesdata);
当selectedshow.performancedata.PerformanceID响应用户导航UI而发生变化时,会多次执行此操作。
到目前为止一切顺利。但是,当服务器上的某些其他代码更新服务器上的transactionSummaryData时,客户端将继续显示“陈旧”数据,但不会注意到更新。我认为这是由于某种缓存。调试代码后,我可以看到服务器发送了正确的数据,但客户端上的LINQ查询继续返回过时的数据。重新启动客户端会导致显示正确的数据。
我认为我在这里遗漏了一些明显的东西,但我看不到如何控制客户端上的任何缓存或使对象无效而不重新建立连接。
答案 0 :(得分:1)
Microsoft论坛上的Emre Meric设法回答了我的问题:
DataServiceContext的默认合并选项是AppendOnly,这意味着如果查询返回的实体已被上下文跟踪,则不会对其进行任何更改。如果希望始终从持久存储更新实体,可以将MergeOption设置为OverwriteChanges。
答案 1 :(得分:0)
如果将DataContext的“ObjectTrackingEnabled”属性设置为false,那么您的问题应该会消失。请参阅此处的MSDN链接:
http://msdn.microsoft.com/en-us/library/system.data.linq.datacontext.objecttrackingenabled.aspx