拆分数据访问层和服务层。缺少连接字符串和引用

Splitting DataAccess and Service Layer. Missing ConnectionStrings and References

我是 .net 开发的新手,我在解决方案的设计方面仍然面临一些问题。正如我的另一个问题中提到的,我的整个解决方案目前分为 3 个项目:

1) DataAccessLayer - 实现 Entity Framework。所有实体都在这里定义。此处还定义了作为 dbContext 子类的 DataAccessContext。 DataAccessContext的代码如下:

public class DataAccessContext : DbContext
{
    public DataAccessContext() : base("name=DataAccessContext")
    {
    }

2) ServiceLayer- 实现 UI 和业务层的方法以从 localdb 服务器访问实体。该层使用 DataAcessLayer 作为参考。

3) BusinessLayer- 实现业务逻辑。使用 ServiceLayer 作为参考。

我遇到了两个我无法理解的问题:

1) 在 ServiceLayer 中,当使用 DataAccessContext 的实例(来自 DataAccessLayer)时,我被要求安装 EntityFramework 包。为什么这是必要的?我的引用 (DataAccessLayer) 没有必要的包吗?

2) 我尝试在ServiceLayer 中编写BusinessLayer 可以调用的方法。代码如下所示:

using ModelDTO.Models;
using DataAccess.Models;

namespace DataAccessService
{
    public class Class1
    {
        DataAccessContext db = new DataAccessContext();

        public IQueryable<BooksDTO>GetAllBooks(){
            var books = from b in db.Books
                        select new BookDTO()
                        {
                            Id = b.Id,
                            Title = b.Title,
                            AuthorName = b.Author.Name
                         };
             return books;
         }

我收到一条错误消息,指出连接字符串 "DataAccessContext" 未在我的应用程序日志中定义。再一次,连接字符串出现在实现 EntityFramework 的 DataAcessLayer 中。那么为什么我的 ServiceLayer 项目中需要它呢?

如果我必须在我的 ServiceLayer 中放入 ConnectionString,我是否应该简单地将我的 DataAcessLayer 和 ServiceLayer 组合在一起?拆分它们有什么好处?

我急于尽快完成这个项目。所以我希望有人能尽快帮助我。谢谢大家。

我认为您应该将数据层和服务层合并在一起。您在服务层中定义的 GetAllBooks 方法属于数据层。如果这代表了您服务层中的其他方法,那么分离数据层和服务层可能没有太大价值。

我通常会创建一个服务层(有时也称为应用层),使其位于业务层和数据层之上。它本质上协调 ui 和 business/data 层之间的操作和请求。层与层之间的依赖关系如下:

  • ui 引用了服务层
  • 服务层引用了业务层和数据层
  • 数据层对业务层有引用
  • 业务层不引用任何其他层

HTH