You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.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项目作为目标,比如:
    dotnet ef migrations add InitialCreate --project App.Data --startup-project App.Web
    
    这样迁移文件会生成在App.Data里,和数据访问逻辑放在一起,更清晰。

这个方案的好处是:

  • Domain层保持纯净,只包含业务实体、业务接口和核心规则,不依赖任何数据访问框架,方便独立测试和复用
  • 依赖关系完全合规:所有数据访问相关的代码都集中在App.Data,Repository依赖Data和Domain,Web/Api依赖所有必要层,没有反向依赖的问题

临时调整方案(不推荐长期使用)

如果暂时不想新增项目,可以调整现有依赖关系:

  • 去掉Domain层对Repository层的引用,改为Repository层引用Domain层
  • 把UsersDbContext留在Domain层,但这样会导致Domain层依赖EF Core框架,污染了纯业务层,后续如果要替换数据访问框架(比如换成Dapper或者MongoDB),会非常麻烦,所以只适合临时救急,不建议长期使用

内容的提问来源于stack exchange,提问作者Diego Perez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 20:42:13