【问题标题】:Caching Entity Framework results in Azure AppFabric在 Azure AppFabric 中缓存实体框架结果
【发布时间】:2012-07-01 08:49:38
【问题描述】:

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

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

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

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

任何最受赞赏的想法!

【问题讨论】:

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


    【解决方案1】:

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

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

    context.Configuration.ProxyCreationEnabled = false;
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-13
        • 2011-08-17
        • 1970-01-01
        • 1970-01-01
        • 2015-08-21
        • 2012-12-16
        • 2018-10-29
        • 1970-01-01
        相关资源
        最近更新 更多