将实体框架数据模型放在MVC应用程序中的位置?

时间:2011-01-16 21:19:24

标签: asp.net-mvc entity-framework asp.net-mvc-2 design-patterns

让我们考虑默认的ASP.NET MVC应用程序文件夹结构,所以它看起来像这样:

-App_data
-Content
-Controllers
    HomeController.cs
-Models
    AccountModels.cs
-Scripts
-Views

我的问题是:放置实体框架数据模型(EDMX)文件的最佳位置在哪里?是Models文件夹吗?是的 - 我们知道好的解决方案是引入新项目并将其引用到MVC应用程序,但现在让我们忘掉它。

4 个答案:

答案 0 :(得分:17)

对于一个小项目,它应该是模型的一部分。对于较大的产品,存储库和关联的模型可以位于单独的程序集中。

答案 1 :(得分:7)

这是有争议的,但我会为模型文件夹投票+1。

唯一的其他候选者是 App_Data ,但这通常用于基于文件的数据库(例如SQL Server CE .MDF)和不希望由IIS提供的文件。

由于EDMX是数据库的抽象,它应该进入 Models 文件夹。

如果项目变大,您应该定义将EF模型移动到另一个项目中。为了证明自己的未来,让控制器通过存储库/接口访问EDMX,因此当您将DAL移动到另一个项目时,您所要做的就是添加引用并添加using语句。

答案 2 :(得分:1)

我会将EF模型(也称为物理模型)始终放在自己的程序集中或主MVC应用程序之外的“核心”程序集中。这同样适用于您的业务逻辑/域逻辑/域服务/等。将非Web内容与MVC-Web-Application分开。

这将有助于您重复使用应用的核心部分。例如,当您需要将其作为服务,命令行工具,迁移工具等公开时

因为将它存储在自己的程序集中非常简单,并且需要几分钟时间,我强烈建议您为每个小应用程序执行此操作。

答案 3 :(得分:0)

我的意见是你应该创建

  1. 域对象,数据交换等的单独项目...... 像MyProject.Infrastructure一样包含很多文件夹 DataContracts,Model,Exceptions等。
  2. DataAccess的单独项目,包含DBContexts和存储库,这样您可以在以后轻松管理迁移