缓存实体框架导致Azure AppFabric

时间:2012-06-30 19:38:42

标签: entity-framework caching azure appfabric entity-framework-4.3

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

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

顺便说一下,我在这里查看了Julie Lerman的文章:http://bit.ly/LWToZT

看起来像一个很酷的项目,但我不完全确定它会解决我无法序列化EF对象的问题。如果我要在我开始的地方结束的话,不要走那条路。

任何想法最受赞赏!

2 个答案:

答案 0 :(得分:4)

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

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

context.Configuration.ProxyCreationEnabled = false;

答案 1 :(得分:1)

我们遇到了类似的问题。我们有一个服务返回使用EF从数据库读取的数据。这些数据需要在Appfabric中缓存。

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