访问API控制器中的Entity Framework模型类

时间:2018-03-06 17:38:39

标签: c# asp.net-mvc entity-framework asp.net-web-api architecture

项目架构是这样的:

  • MyProject.DataAccessLayer:将使用Entity Framework与数据库进行通信

  • MyProject.BusinessLayer:应用程序业务逻辑将在此处

  • MyProject.API:WebAPI ApiControllers将从业务层方法返回数据

我的问题是,如果我在DataAccessLayer中创建了一个实体框架作为单独的项目,我该如何使用DataAccessLayer中的模型类?

我应该添加对MyProject.API的引用来访问模型类吗?如果是这种情况,为什么我需要MyProject.BusinessLayer

被修改

业务层的示例代码:

  public async Task<List<TigerNest.Dao.Area>> GetArea()
          => await yatraDao.GetArea();

ApiController

YatraManager manager = new YatraManager();
var result = await manager.GetArea();
return Ok(result);

ApiController中,BusinessLayer会返回一组区域。它迫使我添加对Dao项目的引用。

1 个答案:

答案 0 :(得分:1)

  

如果我在DataAccessLayer中将实体框架创建为单独的项目,我该如何使用DataAccessLayer中的模型类?

您可以将模型类放入独立项目infrastructure

  

我应该添加对MyProject.API的引用来访问模型类吗?

是的,因为您需要从API返回数据

  

如果是这种情况,为什么我需要MyProject.BusinessLayer

我建议你创建一个Myproject.BusinessLayer,因为业务层可以放置重复的逻辑,以便以后重用。

我们将UIBusinessLayerDataAccessLayer分开可以引用infrastructure项目,infrastructure将使用模型,容器..

enter image description here

修改

简而言之,UI层引用了BLL,BLL引用了DAO,它们都引用了Infrastrure(DTO,ViewModel)公共层

在您的问题中,您可以将EF model DTO model映射到BusinessLayerApiController可以使用DTO model

所以ApiControllerBusinessLayer引用了一个新项目Infrastrure,它放置了DTOViewModel,这样就可以隔离EF模型。

DTO(数据传输对象)与ViewModel类似,但它存在于数据转换中。 EF模型对应于数据库架构,DTO对应于EF模型。

DTO模型应该只包含数据而不包含业务逻辑。

我推荐使用第三方工具包AutoMapper,这有助于我们更轻松地映射对象。

有一篇文章谈论AutoMapper和3层架构

Easily Generate Data Transfer Objects from ADO.NET Entity Framework or LINQ to SQL Data Classes

Mapping Entity Framework Entities to DTOs with AutoMapper