项目架构是这样的:
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
项目的引用。
答案 0 :(得分:1)
如果我在
DataAccessLayer
中将实体框架创建为单独的项目,我该如何使用DataAccessLayer
中的模型类?
您可以将模型类放入独立项目infrastructure
我应该添加对
MyProject.API
的引用来访问模型类吗?
是的,因为您需要从API返回数据
如果是这种情况,为什么我需要
MyProject.BusinessLayer
?
我建议你创建一个Myproject.BusinessLayer
,因为业务层可以放置重复的逻辑,以便以后重用。
我们将UI
,BusinessLayer
,DataAccessLayer
分开可以引用infrastructure
项目,infrastructure
将使用模型,容器..
修改强>
简而言之,UI层引用了BLL,BLL引用了DAO,它们都引用了Infrastrure(DTO,ViewModel)公共层
在您的问题中,您可以将EF model
DTO model
映射到BusinessLayer
,ApiController
可以使用DTO model
。
所以ApiController
和BusinessLayer
引用了一个新项目Infrastrure
,它放置了DTO
或ViewModel
,这样就可以隔离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