如何在Entity Framework 6中禁用模型缓存(Code First方法)

Kry*_*zal 14 c# caching ef-code-first entity-framework-6 ef-model-builder

MSDN文档之后我们可以阅读:

然后缓存该上下文的模型,该模型适用于app域中上下文的所有其他实例.可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存,但请注意,这会严重降低性能.

问题是模型构建器不包含任何名为ModelCaching的属性.

如何禁用模型缓存(例如,在运行时更改模型配置)?

ion*_*173 6

我有同样的问题:一个数据库上下文,两个或多个不同的数据库模型(仅与表名不同)

我对EF6的解决方案:仍然可以使用数据库模型的内部实体框架缓存,但是可以通过在派生的DbContext上实现IDbModelCacheKeyProvider接口来区分同一DbContext 上的DbModel。

MSDN文档在这里:https : //msdn.microsoft.com/zh-cn/library/system.data.entity.infrastructure.idbmodelcachekeyprovider(v= vs.113).aspx 它说:

在上下文中实现此接口,以使用自定义逻辑来计算用于在缓存中查找已创建的模型的键。通过此接口,您可以具有可以与同一AppDomain中的不同模型一起使用的单个上下文类型,也可以具有使用同一模型的多个上下文类型。

希望它可以帮助某人。


phi*_*ady 4

也许旧的 EF4 Docu 仍在 EF6 中。请参阅 modelBuilder.CacheForContextType 不可用

另请参阅 DbContext 构造函数以传入模型DbContext 构造函数

我没有尝试过,但理论上你每次都可以传入一个模型。