我正在使用现有数据库实现干净的架构,使用脚手架命令我已经在基础设施层中生成了 POCO 实体,并在域层中手动创建了实体以便稍后映射它们。
在应用层,我有带有一些标准操作的通用接口存储库。
public interface IRepository<T> where T : class
{
Task<IReadOnlyList<T>> GetAllAsync();
Task<T> GetByIdAsync(int id);
Task<T> AddAsync(T entity);
Task UpdateAsync(T entity);
Task DeleteAsync(T entity);
}
根据 Clean-Architecture 的原则,我在 Infrastructure 层中实现它。
public class Repository<T> : IRepository<T> where T : class
{
protected readonly MyDBContext _MyDBContext;
public Repository( MyDBContext mydbContext)
{
_MyDBContext= mydbContext;
}
public async Task<T> AddAsync(T entity)
{
await _MyDBContext.Set<T>().AddAsync(entity);
await _MyDBContext.SaveChangesAsync();
return entity;
}
-----
----
我正在使用带有 CQRS 的调解器模式,当我尝试从 API 层保存用户时,我最终会遇到以下异常。
System.InvalidOperationException: Cannot create a DbSet for 'ABC.Domain.Entities.User' because this type is not included in the model for the context. However, the model contains an entity type with the same name in a different namespace: 'ABC.Infrastructure.Models.User'.
如果我能够将域实体映射到上述存储库实现中的基础设施实体,它将得到解决。
在上述实现中,T是 ABC.Domain.Entities.User,而不是 ABC.Infrastructure.Models.User。
由于规则清理架构所有依赖项都向内流动,核心不依赖于任何其他层。
请帮助我将传入的域实体与上述存储库实现中的基础设施实体进行映射,以便我也可以将这些通用方法用于其他实体操作。
检查我的骨架回购。
在上述类中,“AddAsync”操作在通用存储库(Repository.cs)中,以后可以用于不同域实体的不同插入操作。在这里我不会知道什么是 T :
公共类存储库:IRepository where T:类
请告诉我查找传入域实体并将其映射到数据实体的通用方法。