拆分数据访问层和服务层。缺少连接字符串和引用
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
我是 .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