c# - EF6 和分层架构

标签 c# .net asp.net-mvc entity-framework asp.net-mvc-5

我知道这个问题一次又一次地出现,我读了很多关于它的资料,但我找不到我的问题的答案。 我在 asp.net mvc 上没有很多经验,但我已经使用 ef、存储库和 uow 模式做了一个项目。 在我上一个项目中,我有几个层,包括:

  • 网络(项目 MVC)
  • BLL(我的业务层)
  • DAL(数据访问,使用 ef 上下文、存储库和 uow 实现)

现在,我想使用 EF6 开始一个新项目。我读到不需要 uow,我想试一试。 到目前为止,我了解到您必须将 dbContext 传递给您的服务,并将您的服务传递给您的 Controller ,对吗? 因此,您的服务层中也必须有对 entityFramework 的引用吗?还是对的? 由于身份实现,您也需要在 UI 中引用 entityFramework。 那么图层还有什么意义呢? 如果我读到这个microsoft guide ,我所要做的就是为我的 DAL 和其他层创建一个文件夹?!对我来说似乎不对……但也许吧?

我读了这个post同样,谁似乎证实了我的观点。如果你在你的用户界面中添加统一并配置它,它只是在你的用户界面中更多的引用:)

所以我的问题是,如果您现在必须使用 EF6、asp.net MVC5 开始一个新项目,您会怎么做? 我想做层是对的吗?或者只是继续我的 MVC 项目?

我想念的一件事是一个 tuto,他一步一步地解释了如何从 Microsoft MVC 5 模板开始并使用层对其进行转换,解耦标识,最后在我的 UI 中没有 ef 引用。这东西存在吗?

最佳答案

这里没有 Elixir 。有些人以一种方式做,有些人以另一种方式做。取决于所需的抽象级别。我曾经有 3 个项目:

  1. 网络
  2. 核心/业务(服务)
  3. 模型/EF/域( Entity Framework 上下文和模型)

如果 Web 引用了 Domain 或 EntityFramework 也没关系。 Web 可以返回 EF 模型(只是为了避免代码重复)。如果您需要更复杂的模型,您可以创建 ViewModel。

我不推荐使用 UoW 或 Repository 模式(除非你真的需要它)。 EF 上下文已经是 UoW 模式的实现。如果您想使用 Entity Framework 实现存储库模式,请不要在接口(interface)中公开与 EF 相关的任何内容,例如SaveChanges()、Dispose(),因为在这种情况下,您将无法利用存储库模式的优势。

这就是我构建典型的中小型 ASP.NET MVC + EF 网站的方式。但正如我所说,一切都取决于所需的抽象级别。抽象级别与需要编写的代码量成正比。所以首先要考虑并保持简单。祝你好运。

关于c# - EF6 和分层架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335908/

相关文章:

c# - Any()的多重枚举和使用

html - 将 bootstrap CSS 类属性添加到文本框 ASP.Net MVC

jquery - 当 FormsLogin session 不再事件时,ASP.NET MVC 强制将 AJAX 请求重定向到登录页面

asp.net-mvc - RedirectToAction 在 ASP.NET MVC 3 中导致 "No route in the route table matches the supplied values"

c# - 后台 worker 事件处理

c# - 循环遍历 List<string> 但只取其中每个字符串的一部分

c# - Label 能否获得焦点?

c# - 为什么 .NET 异常没有被 try/catch block 捕获?

c# - C# 锁定语句中的 Nop 生成

c# - DataGridView SelectLine 颜色为无?