我正在努力想出一个能够正常流动的项目结构,但继续遇到路障。特别是我无法弄清楚EF的DbContext应该去哪里。我不希望我的API引用我的数据层。我唯一能想到的是将EntityFramework安装到Domain层并让DbContext驻留在那里。
TestProj.Data 类库(.NET Core)
实体框架已安装。包含UnitOfWork类,Repositories文件夹以及进行数据库调用的所有存储库。还将包含EF迁移。为其业务实体引用TestProj.Domain。
TestProj.Domain 类库(.NET Core)
具有所有业务实体的模型文件夹,IUnitOfWork接口以及TestProj.Data中存储库的所有接口,即ICustomerRepository。
TestProj.Api Web API项目(.NET Core)
我相信这应该只引用TestProj.Domain,但我还需要引用TestProj.Data来设置StartUp.cs中的所有服务,即
services.AddDbContext<TestProjDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));
services.AddTransient<IUnitOfWork, UnitOfWork>();
services.AddTransient<ICustomerRepository, CustomerRepository>();
这是我开始感到困惑的地方。
我的问题:
Api项目是否可以引用域和数据项目?好像我需要在StartUp.cs
我是否正在为Domain项目中的所有内容添加接口?
TestProjDbContext应该为EF做什么项目?我最初的想法是数据项目?
DTO / Pocos等物品去哪儿了?在API项目或Domain项目中?假设API可以安装AutoMapper,并且因为它引用了TestProj.Domain,可以将原始业务实体映射到API中的DTO。
最后,业务逻辑在哪里?数据层和API之间的规则。我假设正确的地方是TestProj.Domain。如果API只调用域中的业务逻辑而不是将IUnitOfWork注入到我的api控制器中,我会注入TestProj.Domain.Services.CustomerService,这可能会解决我的问题。这有意义吗?
答案 0 :(得分:2)
我对此的看法:
Api项目是否可以引用域和数据项目?
对我来说没关系。
我是否正在为Domain项目中的所有内容添加接口?
YES
TestProjDbContext应该为EF做什么项目?我最初的想法是数据项目?
我通常将BlahBlahContext类放入Domain项目
DTO / Pocos等物品去哪儿了?在API项目或域项目中?
我为这个名为Dto的不同项目做了。然后在需要时引用它。
假设API可以安装AutoMapper,并且因为它引用了TestProj.Domain,可以将原始业务实体映射到API中的DTO。
不确定
最后,业务逻辑在哪里?数据层和API之间的规则。
我在解决方案中用于这个不同的项目 - &gt;称为服务
希望这有帮助。