在ASP.NET缓存中缓存EF实体

时间:2011-10-04 21:57:54

标签: c# asp.net-mvc-3 entity-framework entity-framework-4 entity-framework-4.1

我有一个MVC3站点,其中包含EF4.1和存储库/工作单元模式,并为每个http请求创建一个新的上下文。

我想在Entity Framework 4.1中实现自定义对象缓存。这意味着将对象添加到asp.net缓存中,以便更快地通过其他类似的http请求进行检索。

但是EF的问题是这些缓存的实体被附加到用于首先检索该实体的上下文,并且在该http请求结束后被释放。

现在,当我想更新这个缓存对象时,它给了我“IEntityChangeTracker的多个实例无法引用实体对象”这完全合理。

在MVC3 / EF4.1中实现对象缓存的最佳实践是什么?

我猜你必须在添加到缓存并在检索时附加到新上下文时将实体从旧上下文中分离出来。但我肯定不是第一个遇到这个或试图实现这个的人!

那里有没有帮助者或图书馆? (请不要指向http://code.msdn.microsoft.com/EFProviderWrappers/Release/ProjectReleases.aspx?ReleaseId=4747,因为这会在对表的任何更新中从缓存中删除所有条目,证明自己无用)。

谢谢。

1 个答案:

答案 0 :(得分:0)

“最佳实践”可能是使用特殊的DTO类存储在会话中,并在需要在数据库中保存或加载信息时映射到该类和从该类映射。

然而,你应该能够通过像你说的那样分离和附加实体来实现你的目标。如果您整合逻辑以将其从会话添加到单个类中并将其从会话中删除,那么这应该不是那么困难。