我知道这个问题一次又一次地出现,我读了很多关于它的资料,但我找不到我的问题的答案。 我在 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 个项目:
- 网络
- 核心/业务(服务)
- 模型/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/