Я пытаюсь сделать абстракцию над своим слоем контекста БД (EntityFramework 2.0).
Car.DataContext
-------------------
public abstract class BaseCarContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Car>(e =>
{
e.ToTable("Car");
});
modelBuilder.Entity<Car>(e => { e.ToTable("Cars"); });
}
}
public class CarContext : BaseCarContext
{
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if (optionsBuilder.IsConfigured)
return;
optionsBuilder.UseSqlServer(@"Server = xxxx; Database = xxxx; Trusted_Connection = True;");
}
public DbSet<Car> Cars { get; set; }
}
Car.Logic
----------------
public interface ICarService
{
GetCarResponse RetrieveCar(int id);
void Save(int id);
...
}
public class CarService : ICarService
{
private readonly ICarService service;
// dbContext interface
public CarService(ICarService service){
this.service = service;
// injecting db context interface
}
public void Save(int id){
... saving using injected db context
// injected db context.Insert(new Car{ Name = "Honda" });
}
...
}
Как мне абстрагировать это ядро ef 2 CarContext
, чтобы использовать dbContext
save
Я пытался создать интерфейс IDbContext
, который реализуется CarContext
но таким образом я не могу использовать dbContext.Cars.Insert
, потому что я не реализую коллекцию автомобилей dbContext, у меня нет доступа к основным методам и свойствам ef.
Конечно, я могу использовать конкретную реализацию, но я пытаюсь создать абстракцию, чтобы я мог использовать модульные тесты, ...
Как бы вы это сделали?