【OData】使用Odata获取数据之后再次获取可能得不到最新的数据问题记录

工作上遇到个问题是关于系统后台数据库更新了某数据后, 前台界面刷新显示的不是最新的数据。但是大约10分后再次刷新就能显示新的数据,或者重启IIS等web server host。

最开始认为可能是因为前台获取数据有缓存, 数据是从缓存中直接获取的。

因为该系统使用的OData框架, 这个框架的内部机制是获取一次数据后, 就有一个数据缓存, 在一定时间内这个缓存不会失效, 然后这个时间段里如果想从DB中再次获取数据, 需要根据其初始化的DBContext在这里是Microsoft.OData.Client.DataServiceContext的merge option来判断获取的新数据都有哪些, 这个值默认是append, 所以后台更新的数据不属于其中, 则没有获取到,需要将merge option改成:

this.MergeOption = Microsoft.OData.Client.MergeOption.OverwriteChanges 即可。


        // Summary:
        //     Gets or sets the synchronization option for receiving entities from a data service.
        //
        // Returns:
        //     One of the members of the Microsoft.OData.Client.MergeOption enumeration.
        //
        // Remarks:
        //     Used to specify a synchronization strategy when sending/receiving entities to/from
        //     a data service. This value is read by the deserialization component of the client
        //     prior to materializing objects. As such, it is recommended to set this property
        //     to the appropriate materialization strategy before executing any queries/updates
        //     to the data service. The default value is Microsoft.OData.Client.DataServiceContext.MergeOption.AppendOnly.
        public MergeOption MergeOption { get; set; }

 

 

参考资料:

MSDN: Microsoft.OData.Client.DataServiceContext

https://stackoverflow.com/questions/14237362/does-microsoft-data-services-client-caches-data

https://blogs.msdn.microsoft.com/dsimmons/2010/01/12/ef-merge-options-and-compiled-queries/

https://blogs.msmvps.com/kevinmcneish/2010/02/16/setting-entity-framework-mergeoptions-what-works-what-doesn-t/

https://stackoverflow.com/questions/14237362/does-microsoft-data-services-client-caches-data

转载于:https://www.cnblogs.com/it-dennis/p/9854924.html

你可能感兴趣的:(【OData】使用Odata获取数据之后再次获取可能得不到最新的数据问题记录)