Я уже реализовал шаблоны UOW / Repository (ссылка this с небольшими изменениями для IDbContext), как указано ниже, для поддержки TDD:
- IDbContext
public interface IDbContext : IDisposable
{
DbSet<T> Set<T>() where T: class;
Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
// Entities
DbSet<Category> Categories{ get;set; }
DbSet<Article> Articles {get;set;}
}
DblogDbContext реализованы IDbContext и DbContext из EFCore
public class BlogDbContext : DbContext , IDbContext
{
public BlogDbContext(DbContextOptions<BlogDbContext> options)
:base(options)
{ }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new CategoryConfigurations());
modelBuilder.ApplyConfiguration(new ArticleConfigurations());
}
public DbSet<Category> Categories { get; set; }
public DbSet<Article> Articles {get;set;}
}
IUnitOfWork public interface IUnitOfWork : IDisposable
{
ICategoryRepository Categories{get;}
Task<int> SaveAsync();
}
UnitOfWork public class UnitOfWork : IUnitOfWork
{
private readonly IDbContext _context;
public UnitOfWork(IDbContext context)
{
_context = context;
Categories = new CategoryRepository(context);
}
public ICategoryRepository Categories { get; }
}
// removed code for implementation of Repositories
Я хотел бы добавить Dapper в мой проект с такими же интерфейсами UOW / Repositories для SQL запросов вручную или CRUD, если таковые имеются. Но я застрял в способе, который я в настоящее время внедряю для IDbContext , нет необходимости Set или DbSet для Dapper. Я имею в виду в DI .Netcore у меня в настоящее время есть:
services.AddDbContext<BlogDbContext>(options => options.UseSqlServer(Configuration.GetConnectionString("BloggingDatabase")));
services.AddScoped<IDbContext, BlogDbContext>();
services.AddScoped<IUnitOfWork, UnitOfWork>();
Я ожидаю иметь другую реализацию для IUnitOfWork, но использую Dapper в качестве ORM вместо EFCore. И я просто регистрирую это следующим образом:
services.AddScoped<IUnitOfWork, DapperUnitOfWork>();
И все по-прежнему работает как обычно. Я не знаю, как в EFCore и Dapper сосуществуют на одних и тех же интерфейсах UOW / Repositories. Пожалуйста, дайте мне совет или решение, чтобы оба ORM работали под одним интерфейсом UOW / Repositories.
Что мне делать с таким требованием?