Entity framework 实体框架是否自动缓存ModelBuilder模型?

Entity framework 实体框架是否自动缓存ModelBuilder模型?,entity-framework,caching,Entity Framework,Caching,我正在使用实体框架开发一个ASP MVC应用程序。我曾考虑编写代码来缓存ModelBuilder返回的对象(这是多个来源推荐的),但后来我在Scott Gu的博客上遇到了这个问题: 在运行中的应用程序中首次使用NerdDinners类时,将调用上面的OnModelCreating方法,并将其传递给“ModelBuilder”对象作为参数。ModelBuilder对象可用于自定义模型对象的数据库持久性映射规则。下面我们将看一些如何执行此操作的示例 “EF仅在正在运行的应用程序中调用“OnModel

我正在使用实体框架开发一个ASP MVC应用程序。我曾考虑编写代码来缓存ModelBuilder返回的对象(这是多个来源推荐的),但后来我在Scott Gu的博客上遇到了这个问题:

在运行中的应用程序中首次使用NerdDinners类时,将调用上面的OnModelCreating方法,并将其传递给“ModelBuilder”对象作为参数。ModelBuilder对象可用于自定义模型对象的数据库持久性映射规则。下面我们将看一些如何执行此操作的示例

“EF仅在正在运行的应用程序中调用“OnModelCreating”方法一次–,然后自动缓存ModelBuilder结果。这避免了每次实例化NerdDinners类时创建模型对性能的影响,意味着您无需编写任何自定义缓存逻辑即可在应用程序中获得优异的性能。”

这是否意味着EF会自动缓存ModelBuilder对象,而我不必编写代码来实现这一点,或者这只是在重写OnModelCreating方法时才实现的,还是…?

来自EF 4中关于性能改进的说明

模型缓存 这涉及到一些成本 发现模型,处理数据 注释和应用fluentapi 配置。以避免发生这种情况 每次创建派生DbContext时的成本 实例化后,模型将被缓存 在第一次初始化期间 然后,每次都会重复使用缓存的模型 相同的派生上下文是 在同一AppDomain中构造。 模型缓存可以通过以下方式关闭: 设置CacheForContextType ModelBuilder上的属性在中设置为“false” OnModelCreating方法


因此,Entity Framework 4.0的答案是肯定的,如果我读得正确,他说模型是缓存的,而不是上下文,即使在上下文实例化时缓存也会发生。对吗?缓存DbContext对象没有意义,因为它在整个会话中都会发生变化。也就是说,我计划存储在HttpCo中ntext.Current object。我会小心地将整个上下文缓存在全局缓存中。如果不小心,可能会遇到各种同步问题。为什么要这样做?我没有将上下文缓存在全局缓存中。我计划将其缓存在HttpContext.Current object中,正如我所说的。这就是我使用的模型进入缓存——如ModelBuilder model=new ModelBuilder()。然后需要使用该模型来创建上下文——model.CreateObjectContext(…)等。对吗?(或CreateDbContext)我从ADO.NET开发人员博客中获取线索——如以下代码所示:var builder=new ModelBuilder();builder.Configurations.Add(新建BookConfiguration());builder.Entity();builder.Entity().Property(p=>p.Name).IsRequired().HasMaxLength(50);var model=builder.CreateModel();