【问题标题】:Structuring an ASP.NET MVC (Entity Framework) app构建 ASP.NET MVC(实体框架)应用程序
【发布时间】:2013-11-27 13:52:09
【问题描述】:

我有一些关于 MVC 模式和构建我的应用程序的一般性问题。在我的应用程序中,我将管理多个不相关的实体。在大多数情况下,一个实体可以是多个数据库表。

例如,应用程序可能管理 Persons 和 Fruit。 Person 和 Fruit 之间没有任何关系。

Persons 实体由多个表组成。

**Person**
PersonID
JobID
LocationID

**Job**
JobID
Name

**Location**
LocationID
Name

Fruit 实体(与 Person 完全无关)也由多个表组成。

**Fruit**
FruitID
ColorID
ShapeID

**Color**
ColorID
name

**Shape**
ShapeID
Name

所以在我的项目中,每个数据库表都有一个模型类。我为每个实体(FruitController 和 PersonController)都有一个控制器

所以这就是我的困惑出现的地方:

我应该为每个实体创建一个 DBContext 还是为整个项目创建一个 DBContext?

现在假设我为这个项目创建了一个迁移。创建一个迁移,在我的 Migrations 文件夹中给了我一个 configuration.cs 文件。打开该文件,有一个以 DBContext 作为参数的 Seed 方法。如果您对上一个问题的回答是为每个实体设置一个 DBContext,那么由于我将 DBContext 作为参数传入,我该如何为每个实体播种?

接下来是存储库。 我应该为每个实体创建一个存储库还是为每个表创建一个存储库?

我已经知道有大量示例展示了如何设置这些东西,但其中大多数只是展示了如何做事的基本部分。我想我正在寻找比基本示例更上一层楼的东西。

【问题讨论】:

  • 您可以创建新标签。让你知道
  • 不知道。我确实很难相信我是第一个提出 MVC5 问题的人,所以这让我觉得是其他人在创建标签。
  • 人可以是水果,你知道的! :) 我一直应用的经验法则是为您要连接的每个数据库提供 1 个上下文。如果 Person 和 Fruit 对象存储在同一个 DB 中,则它是同一个上下文。

标签: entity-framework asp.net-mvc-4


【解决方案1】:

我建议对两个实体使用相同的 DBContext 文件,如果使用 2,则更难以使数据库与您的模型保持同步。这也解决了多个种子文件的问题。

然后您应该为每个实体创建一个不同的存储库(因此 1 个用于 Fruits,1 个用于 Persons)。它们都会在构造函数中注入相同的 DBContext。

当然这不是一成不变的,你应该使用对你最有意义的方法。

【讨论】:

  • 其实,现在我想多了,如果你使用的是内置安全性,你已经有一个 ApplicationContext,所以我可能会拥有不止 1 个上下文
猜你喜欢
  • 2012-10-18
  • 2011-02-20
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2012-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多