缓存实体框架会在 Azure AppFabric 中生成



我正在尝试弄清楚如何在Azure AppFabric缓存中缓存EF查询结果。 目前,我正在使用LoreSoft EntityFramework扩展来处理缓存(http://bit.ly/LWSywm)。 它与内存缓存完美配合,但与跨多个虚拟机的 AppFabric 配合使用则不然。 问题是我的 EF 对象中有虚拟属性,并且它们被序列化为动态代理对象,当然不能在不同的 VM 上反序列化,甚至在单个 VM 重新启动应用程序后也是如此。

我只需要缓存几个查询,所以我宁愿不在整个项目中手动加载每个相关对象。 有什么方法可以使用虚拟属性序列化 EF 对象吗? 我不需要虚拟属性在反序列化后神奇地再次开始延迟加载。 我尝试在序列化结果之前关闭延迟加载 DbContext,但这不起作用。 我发现获取可序列化 EF 对象的唯一方法是删除所有虚拟属性。

顺便说一下,我在这里看了朱莉·勒曼的文章:http://bit.ly/LWToZT

似乎是一个很酷的项目,但我不完全确定它是否会解决我无法序列化 EF 对象的问题。 不想走那条路,如果我只是要结束我开始的地方。

任何想法最值得赞赏!

您可以将数据库上下文(或对象上下文)配置为不使用代理对象。显然,这意味着没有更改跟踪和延迟加载。如果您不急于加载对象的导航属性,则它们将仅为 null,而不是对代理的引用。值得注意的是,您可以在上下文的整个生命周期中打开和关闭它,因此这不是一个全有或全无的决定。

如果您使用的是 DbContext,则语法为:

context.Configuration.ProxyCreationEnabled = false;

我们也有类似的问题。我们有一个服务,该服务返回使用 EF 从数据库中读取的数据。此数据需要缓存在 Appfabric 中。

在我们的例子中,服务返回了 DTO 对象,因此我们将 EF 对象映射到 DTO 对象,然后将 DTO 对象存储在 Appfabric 缓存中。

最新更新