在 MVC 应用程序中将实体框架数据模型放在哪里?

发布于 2024-10-12 04:34:43 字数 278 浏览 2 评论 0原文

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

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

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

Lets consider default ASP.NET MVC application folder structure, so it's looks like this:

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

My question is: Where is the best place to put Entity Framework Data Model (EDMX) file? Is it Models folder? Yes - we know that good solution is to introduce new Project and reference it to MVC application, but lets forget about this now.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

从﹋此江山别 2024-10-19 04:34:43

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

For a small project, it should be part of the Model. For a larger product, the repository and the associated model could be in a separate assembly.

人间☆小暴躁 2024-10-19 04:34:43

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

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

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

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

Well this is debatable, but i'd vote +1 for the Models folder.

The only other candidate would be App_Data, but this is generally for file-based databases (SQL Server CE .MDF, for example) and files you don't want served by IIS.

As the EDMX is an abstraction of the database, it should go into the Models folder.

If the project gets bigger, you should definetely move your EF Model into another project. To future-proof yourself from this, make your Controllers access the EDMX via Repository/Interfaces, so when you move the DAL over to another project, all you'll have to do is add the reference and add in the using statements.

孤千羽 2024-10-19 04:34:43

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

这将帮助您重用应用程序的核心部分。例如,当您需要将其公开为服务、命令行工具、迁移工具等时。

因为将其存储在自己的程序集中非常容易并且需要几分钟时间,所以我强烈建议对每个微小的应用程序也是如此。

I would put the EF-model (aka physical model) always in its own assembly or in a "core" assembly outside of main MVC application. The same applies for your business-logic / domain-logic / domain-services / etc. Separate the non-web stuff from the MVC-Web-Application.

This will help you re-use the core part of your app. For example when you need to expose it as a service, a command-line tool, migration-tool, etc.

Because storing this in its own assembly is so easy and takes you a few minutes I highly recommend doing this for each and every tiny app too.

仅此而已 2024-10-19 04:34:43

我的意见是,你应该

  1. 为域对象、数据契约等创建一个单独的项目......
    像 MyProject.Infrastruct 一样,包括许多文件夹,例如
    DataContracts、模型、异常等。DataAccess
  2. 的单独项目,其中包含 DBContext 和存储库,这样您以后就可以轻松管理迁移

My opinion is that you should create

  1. a separate project for domain objects, datacontracts etc. etc...
    Like MyProject.Infrastructure including many folders like
    DataContracts, Model, Exceptions etc.
  2. a separate project for DataAccess wich contains the DBContexts and the Repositories, this way you can easily manage migrations later on
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文