.NET 7分层架构下Repository无法访问DbContext的解决方案咨询
解决方案建议
最优方案:拆分独立的App.Data项目
这是最符合分层架构设计的做法,具体调整如下:
- 新建App.Data类库项目,专门存放数据访问相关内容:包括
UsersDbContext的定义、EF迁移配置、实体的Fluent API配置等 - 调整依赖关系:
- App.Data引用App.Domain(因为DbContext需要用到Domain里的业务实体)
- App.Repository同时引用App.Data和App.Domain(Repository需要用DbContext操作数据,同时依赖Domain的实体和业务规则)
- App.Web和App.Api引用App.Data、App.Domain、App.Repository(Web/Api负责配置DbContext注入,调用Repository)
- EF迁移的处理:执行迁移命令时指定Data项目作为目标,比如:
这样迁移文件会生成在App.Data里,和数据访问逻辑放在一起,更清晰。dotnet ef migrations add InitialCreate --project App.Data --startup-project App.Web
这个方案的好处是:
- Domain层保持纯净,只包含业务实体、业务接口和核心规则,不依赖任何数据访问框架,方便独立测试和复用
- 依赖关系完全合规:所有数据访问相关的代码都集中在App.Data,Repository依赖Data和Domain,Web/Api依赖所有必要层,没有反向依赖的问题
临时调整方案(不推荐长期使用)
如果暂时不想新增项目,可以调整现有依赖关系:
- 去掉Domain层对Repository层的引用,改为Repository层引用Domain层
- 把
UsersDbContext留在Domain层,但这样会导致Domain层依赖EF Core框架,污染了纯业务层,后续如果要替换数据访问框架(比如换成Dapper或者MongoDB),会非常麻烦,所以只适合临时救急,不建议长期使用
内容的提问来源于stack exchange,提问作者Diego Perez
相关产品推荐
相关产品推荐

