wcf-data-services - 如何使 WCF Dataservice 停止跟踪实体更改?

标签 wcf-data-services odata tridion tridion-content-delivery

我有一个 Web 应用程序,它通过代理调用 OData Webservice ( DataServiceContext )。问题是代码即使每次都调用 OData webservice,但它总是在内容管理系统 (SDL Tridion) 中更改内容后返回旧数据。



string getPageContentForUrl(string url)
{
    var page = cdService
                   .Pages
                   .Expand("PageContent")
                   .Where(x => x.Url == url)
                   .FirstOrDefault();

    if (page == null || page.PageContent == null)
    {
        return string.Empty;
    }
    else
    {
        return page.PageContent.Content;
    }

}

我们必须重置应用程序池才能看到最新的数据更改。

因此,在进行更多调试时,我注意到

var context = (System.Data.Services.Client.DataServiceContext)cdService;
context.Entities[0].State = Unchanged

所以我尝试通过调用 .Detach() 来修复它在从 getPageContentForUrl 返回值之前显式地返回,所以像,

cdService.Detach(page);
cdService.Detach(page.PageContent);

我的问题是,我可以在更“全局”的级别上执行上述操作吗?也许让 web 服务始终假定状态为“已更改”,因为我不想手动将代码写入 Detach() ?

最佳答案

我认为答案确实在于 - 正如您所怀疑的 - 在您正在使用的代理中,或者更确切地说在 DataServiceContext 中。这是微软不得不说的:

By default, the client only materializes an entry in the response feed into an object for entities that are not already being tracked by the DataServiceContext. This means that changes to objects already in the cache are not overwritten. This behavior is controlled by specifying a MergeOption value for queries and load operations.



对我来说,这听起来与您所描述的行为完全一样。幸运的是,可以通过在 DataServiceContext 上设置 MergeOption 属性来关闭缓存。

http://msdn.microsoft.com/en-us/library/gg602811.aspx .

关于wcf-data-services - 如何使 WCF Dataservice 停止跟踪实体更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13286416/

相关文章:

c# - 在 WCF 数据服务中使用枚举

c# - OData 客户端代码生成器,创建和更新包含实体

c# - 在 ASP.NET Core Web API 中创建返回 OData 的 enbdpoints

tridion - 如何在 SDL Tridion Anguilla 框架中从用户的 ID 中获取用户的名称和描述

tridion - 什么是非交付自定义渲染器?

c# - OData $expand URL 限制?

c# - 通过 WCF 数据服务插入新的父/子

silverlight - 在我的 ViewModel 中使用 DataServiceCollection 时如何实现 "Blendability"

c# - 适用于 .NET 的 OData 4.x 解析器

tridion - 如何在 SDL Tridion 2011 Sp1 组件的 RTF 字段中添加自定义元素