c# - 为每个页面使用不同的 DbContext 类的好习惯?

标签 c# asp.net entity-framework code-first

<分区>

我正在优化和重构大型 ERP 类型的 ASP.NET 应用程序以实现更快的开发体验。 我们目前有一个大型模型(600 多个表/实体),它是在应用程序启动时创建的,大约需要 15 秒。 (此时,我们使用带有代码优先映射的 NHibernate)

我试图在编译完成后实现最快的页面呈现。

我想知道每个页面有一个 DbContext 是否是一个好习惯,它只包含使用此页面所需的实体/映射。 每个页面都被视为一个独特的元素,可以单独携带。

编辑:我不是在谈论重用 DbContext 的实例,而是具有不同 DbSet 的不同对象。将为每个请求创建一个不同的实例。

最佳答案

I was wondering if it would be a good practice to have one DbContext per page which would include only the required entities/mappings to use this page.

我不认为每个页面都有一个专用的 DbContext 类型是个好主意。

  • 每个 DbContext 的类型模型将在整个应用程序域生命周期内占用内存。我会说大约 20 种实体类型的占用空间约为 5MB。
  • 您将很难定义每个 DbContext 类型的边界(根据具体情况忽略实体的导航属性将迫使您定义大量专用映射配置)。这并不是一个坏主意,但我想 Linq 支持几乎没有用,而且我认为微 orm 更适合这种方法。

您也可以选择有界上下文:将您的域模型分成对应于相同关注点的实体集(假设每个关注点最多 50 个实体),并为每个关注点使用专用的 DbContext 类型(没有跨不同实体的导航属性)数据库上下文)。请注意,您可以定义非常简单的交叉关注点(主要是只读)映射以在整个应用程序中使用交叉关注点概念(例如,一个 UserSummary 实体公开了 User 实体的主要属性)

关于加速启动,我想这可以帮助3 STEPS FOR FAST ENTITYFRAMEWORK 6.1 CODE-FIRST STARTUP PERFORMANCE

关于c# - 为每个页面使用不同的 DbContext 类的好习惯?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948539/

相关文章:

c# - Visual Studio 2010 扩展获取选定的文本

c# - 将 White.UIItems.TextBox.Text 设置为 unicode

c# - 从 cs 页面启用/禁用必填字段验证器?

asp.net - 如何将文本验证为有效的 HTML?

.net - EF4 可以使用自定义约定从数据库生成模型

c# - 如何使用 IMAPI2 检索和设置刻录速度?

c# - Automapper自定义多对一转换

asp.net mvc - View 和 Controller

c# - 如何确定 PropertyType 是否为外键

c# - 使用空间类型 EF CORE 创建模型