【发布时间】:2012-05-09 05:44:52
【问题描述】:
使用 Silverlight 4、Oracle 11g 和实体框架 4。
我使用 DataServiceQuery 来填充 DataGrid。然后,一些本地(非 EF)代码更新数据库。我想使用相同的查询来用更新/新数据刷新 DataGrid。问题是,当我这样做时,它会返回旧的原始结果。我已经验证了这些更改实际上已在此代码运行之前提交到数据库:
DataServiceContext<T> dsContext= new DataServiceContext<T>(uri);
dsContext.MergeOption = MergeOption.NoTracking;
dsContext.SaveChangesDefaultOptions = SaveChangesOptions.ReplaceOnUpdate;
DataServiceQuery<T> dsQuery = dsContext.CreateQuery<T>(typeof(T).Name);
// oldQuery is an IQueryable<T>
dsQuery = (DataServiceQuery<T>)oldQuery;
var dsQuery = (DataServiceQuery<T>)oldQuery;
dsQuery.BeginExecute(new AsyncCallback(c =>
{
IEnumerable<T> result = dsQuery.EndExecute(c);
listSelectedRecord = new List<T>();
listSelectedRecord = result.ToList();
}), dsQuery);
据我所知,即使正在创建新的DataServiceContext,新的dsQuery 甚至都没有发送到 Oracle 服务器。它显然发现它在某处有一个缓存副本。如果我在浏览器中输入查询,它会返回更新后的结果。
关于如何强制 DS 重新执行查询的任何建议?
【问题讨论】:
-
相关链接:forums.asp.net/t/1363040.aspx/1 如上所示,我已经在使用 MergeOption.NoTracking 标志了。
-
我还注意到,如果我查看 dsContext.Entities,这个 DataServiceContext 对象似乎根本没有跟踪任何实体! Silverlight 数据服务客户端与 .NET 完整版有何不同?
标签: silverlight entity-framework wcf-data-services