【问题标题】:Confused about layers when using EF6使用 EF6 时对图层感到困惑
【发布时间】:2014-11-03 15:40:59
【问题描述】:

我是 Entity Framework 6 的新手,但想在我们软件的下一个版本中使用它。

在我当前的项目中,我使用 Csla,它将 DAL 和 BusinessLayer 包装到 1 个项目中。

EF 是否与 Csla 一样并在 1 个项目中创建 DAL 和业务层?所有在线教程都使用 Code First 方法并将这些对象直接绑定到 MVC 网页。

如果我使用数据库优先的方法,这会有所不同吗?这会只创建 DAL 对象吗,我是否必须编写这些对象的业务层版本?

我在网上读到人们将模型移动到一个单独的项目中,因此您可以在层之间传递这些对象。如果您这样做,您会在 DAL 或 BusinessLayer 中拥有什么?

我会提到我们使用 SQLServer 作为我们的数据库。我认为这不会改变,但永远不要说永远。

【问题讨论】:

    标签: c# vb.net entity-framework data-access-layer business-logic-layer


    【解决方案1】:

    我不知道 Csla 是什么。我不知道您所说的“EF 是否与 Csla 一样并在 1 个项目中创建 DAL 和业务层?”。

    就将您的项目分层而言,这是一个好主意。

    使数据库优先的方法不应该改变任何东西,实际上不使用 EF 也不应该改变任何东西。因为你应该使用Repository 模式:http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4/implementing-the-repository-and-unit-of-work-patterns-in-an-asp-net-mvc-application

    将模型 POCO 移动到单独的项目中也是一个好主意。为什么?考虑到同一服务有不同的项目:1) ASP.NET Web 应用程序,2) ASP.NET WebAPI,3) WCF 服务。当所有人都依赖相同的模型时,您的模型应该是一个单独的项目。做好最坏的打算,你永远不会后悔。

    因此,如果您使用存储库模式,您的 DAL 就是您实施存储库模式的项目。

    在业务层,你有业务逻辑。如果将模型放入自己的项目中,为什么您认为业务层会出现问题?

    【讨论】:

    • 那么modela真的像dtos吗?一种在层之间传递数据的方法?如果使用 ef 生成一个 ur 模型,那么 dal 层究竟是什么 voea?只是 dbcontext 对象(首先使用代码)?
    • 是的,模型用于为您的应用程序/服务传递核心数据。如果您使用存储库模式,存储库类将成为 DAL。否则,DbContext 就是 DAL。
    • 使用 EF 时是否需要存储库模式?一直在网上阅读,有人说是,有人说 dbcontext 是存储库。你有什么意见?
    • 使用存储库模式几乎总是更好。特别是对于单元测试,您不能使用 DbContext。此外,如果您使用依赖注入 (IoC),最好还是使用存储库模式。如果有一天您决定停止使用实体框架并用其他库/ORM/纯 SQL 替换它,如果您想避免大量代码重构,则需要存储库模式。
    最近更新 更多