用途
该技能用于生成 .NET 清洁架构(Clean Architecture)项目中的仓储(Repository)代码,为数据访问提供抽象层。它按照仓储模式生成接口与实现,使领域层不直接依赖具体的数据访问技术。
主要能力
- 分层结构:接口定义在 Domain 层,实现放在 Infrastructure 层,实现使用 EF Core。
- 按聚合根组织:仓储以聚合根(Aggregate Root)为单位,而非按单个实体。
- Unit of Work 集成:命令方法只做跟踪,不调用 SaveChanges,统一通过 IUnitOfWork 提交。
- 查询方法:提供 GetByIdAsync、GetByIdWithDetailsAsync、GetByNameAsync、GetByOrganizationIdAsync、GetAllActiveAsync、ExistsAsync、ExistsByNameAsync 等模板。
- 命令方法:提供 Add、AddRange、Update、Remove、RemoveRange 等仅跟踪、不保存的方法。
- 子实体访问:支持通过聚合根访问子实体,如 Get{ChildEntity}ByIdAsync、Get{ChildEntities}By{Entity}IdAsync。
- 规约模式:提供 ISpecification、BaseSpecification 及具体规约示例,并支持 GetAsync、GetFirstOrDefaultAsync、CountAsync 等基于规约的查询。
- 泛型仓储基类(可选):提供抽象 Repository<T> 基类,供具体仓储继承并扩展实体专属方法。
- 依赖注入注册:提供 AddPersistence 示例,注册 DbContext、IUnitOfWork、各仓储以及用于 Dapper 查询的 ISqlConnectionFactory。
- 查询优化模式:包含 AsNoTracking 只读查询、避免过度 Include 的示例。
使用方式
技能以模板形式给出代码,开发者按项目命名空间与实体名称替换占位符(如 {name}、{Entity}、{Aggregate}、{ChildEntities} 等)即可。仓储结构示例:
/Domain/{Aggregate}/
└── I{Entity}Repository.cs # 接口(Domain 层)
/Infrastructure/Repositories/
└── {Entity}Repository.cs # 实现(Infrastructure 层)
接口模板包含查询方法与命令方法,实现模板使用 ApplicationDbContext 与 EF Core 的 Set<T>()、FirstOrDefaultAsync、Include、AnyAsync、ToListAsync 等 API。规约模式部分定义了 ISpecification<T> 与 BaseSpecification<T>,并给出 Active{Entities}Specification、{Entities}ByOrganizationSpecification 等示例。注册部分示例使用 AddDbContext、UseNpgsql、UseSnakeCaseNamingConvention,并注册 IUnitOfWork 与各仓储。
适用场景
适用于采用 .NET 清洁架构、使用 EF Core 作为 ORM、希望将数据访问逻辑与领域层解耦的项目。适合需要按聚合根组织仓储、使用 Unit of Work 统一提交、或引入规约模式进行复杂查询的团队。
限制
资料未提供该技能的安装命令、收费方式、支持平台、版本要求或实际运行效果等信息,暂未提供。代码模板中的占位符需开发者自行替换,具体数据库提供程序与命名约定以项目实际配置为准。