EF实体Deep Copy&网络缓存

时间:2014-09-26 12:08:54

标签: asp.net-mvc entity-framework asp.net-mvc-3 caching entity-framework-6

我在Web应用程序中使用MVC3框架和EntityFramework 6。我使用系统Web缓存将大多数用ef加载的用户特定数据存储在服务器缓存中。我的DbContext是特定于请求的(每个请求一个实例)。问题是我还将缓存中的ef实体对象缓存为用户特定的(每个用户应用程序单独的缓存密钥)。对于每个请求,我从缓存中获取它并使用context.Attach将其附加到当前的EF上下文。我的问题是,如果同一用户同时登录两次或多次(不同的浏览器等),则缓存的实体将附加到多个上下文,因为缓存是每个服务器的全局,并且检索相同的对象引用。 / p>

我得到一个例外,即不同的上下文多次引用同一个实体。当我从缓存中获取实体时,我试图复制该实体,但它有许多带有子实体的外键,这不是一个选项。

有谁知道我的案例中的解决方案是什么?我试图避免从每个请求的数据库中获取实体。

1 个答案:

答案 0 :(得分:0)

article的第5点描述了您获得的错误。简而言之,EF6在您的实体周围放置一个代理包装器,并引用它附加到的原始上下文。

在缓存实体之前,必须将其从DbContext中分离。

您可以查看使用EFCache并设置针对要缓存的实体的策略。