在数据层中使用EF访问sql-db,如何将数据传递到服务层?

时间:2018-02-20 17:56:13

标签: c# entity-framework architecture separation-of-concerns

我需要访问现有sql-database中的一些数据并使用REST-Service(使用Webapi)发布它。

在我之前的非常小的项目中,我刚从控制器直接访问了EF-Context,从我的EF-Entities创建了一些DTO并将其返回给调用者。这很简单,我的工作非常快。

现在,这个项目并没有那么大,但我想做到这一点,正确的方式'这一次,每个人都在谈论分层架构,即使对于一个小项目,所以单元测试等更容易。

作为一个新手(是的,我需要阅读更多书籍)我决定开始阅读大量关于应用程序的架构设计等博客文章。

首先要了解使用EF访问数据库中的数据的各种技术(我使用v6.2,DB-First)。有人说,你需要为每个实体建立一个存储库,有人说,创建一个通用的存储库,其他人说,存储库是新的邪恶,不惜一切代价避免它们。

我读过的一些博文:

generic-dal-using-entity-framework

is-the-repository-pattern-useful-with-entity-framework

repositories-on-top-unitofwork-are-not-a-good-idea

why-entity-framework-renders-the-repository-pattern-obsolete

favor-query-objects-over-repositories

等等。

即使是其他人说,将EF生成的POCO分开也应该与纯粹的POCO分开。 EF-stuff就像EDMX:splitting-entity-framework-model-classes-separate-projects

有些帖子很旧,可能已经过时,但我只是在努力寻找完成任务的最佳方法。

现在,我有4个项目:

DGO.Core:包含我的DTO&#39>

DGO.Data:包含我的EF-Stuff和1个Repository-Class(详见下文)。

DGO.Service:引用DGO.Data并访问repository-class公开的方法。

DGO.Webapi:引用所有三个DLL,但使用Service-Dll中的方法。 我需要引用Data-Dll才能注入数据存储库。

所以现在我的db-queries驻留在Data-DLL中(在所谓的repository-class中),它从我的Core-DLL创建了填充的DTO。然后将这些DTO传递给Service-DLL,它可以在这里和那里处理一些逻辑,然后将这个DTO传递给Webapi-Controller。

这是通过所有层传递这些DTO的常用方法吗? 或者将POCO与EDMX分开并直接在我的服务层中使用它们会更好。

所以方向将是'数据层' - > '波苏斯' - > '服务层' - > ' DTO的' - >客户(控制器等)。

查询应该在哪里进行?我认为,在数据层,但有人说,它应该在服务层完成。我认为,数据层负责查询数据,服务层负责工作'与数据。

希望,我明白了问题。如果有必要,可以提供代码。 谢谢!

0 个答案:

没有答案