DbContext是一项昂贵的操作吗?

jjw*_*015 13 c# asp.net-mvc entity-framework

在C#MVC EF框架中,我看到很多示例只需DbContext在需要插入或查询时创建一个新的,然后关闭/释放它(许多使用"using"进行自动关闭/释放).

对此进行了一些搜索,但找不到一个好的答案,但却创造了DbContext一个非常便宜和快速的操作?

例如,考虑一个典型的MVC应用程序,在页面上它有许多"组件",例如标题,边栏,主要内容等,并且在非平凡的设置中,每个组件都有自己独立的逻辑和代码 - 我想DbContext在每个组件中创建一个新的代码吗?(如果是,系统会自动缓存查询结果吗? - 例如,一个常见的用例是,在每个组件中,它需要在数据库中查询当前站点范围的设置,这是同一行中的表).

Jer*_*vel 15

如" 实体框架4,5和6的性能考虑 "第9.3节(强调我的)所述:

实体框架的上下文旨在用作短期实例,以提供最佳的性能体验.预期上下文将是短暂的并且被丢弃,因此已经实现了非常轻量级并且尽可能地重新使用元数据.在Web方案中,重要的是要记住这一点,并且不要有超过单个请求持续时间的上下文.同样,在非Web方案中,应根据您对实体框架中不同级别的缓存的理解来丢弃上下文.一般来说,应该避免在应用程序的整个生命周期中使用上下文实例,以及每个线程和静态上下文的上下文.