抽象 ef core 2 dbContext

用户1765862

我正在尝试对我的数据库上下文层(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 core 2CarContext以便使用dbContextsave

我试图制作一个IDbContext由其实现的接口CarContext但我无法使用这种方式,dbContext.Cars.Insert因为我没有实现 dbContext 汽车集合无法访问 ef 核心方法和属性。

我当然可以使用具体的实现,但我正在尝试进行抽象,以便我可以使用单元测试,...

你会怎么做?

克里斯普拉特

首先,您不需要对单元测试进行抽象。EF Core 100% 测试友好。其次,在我看来,对于 EF(或任何ORM)来说,唯一真正可接受的抽象要么是微服务,要么是 CQRS/事件源模式。这些实际上增加了价值,因为它们要么完全抽象依赖项和/或解决实际的业务线问题。但是,这些模式也需要付出大量努力才能正确实现,因此,通常为大型、复杂的应用程序保留。

总而言之,除非您有充分的理由不使用,否则请直接使用 EF。测试不是一个很好的理由。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在EF Core中实例化DbContext

如何从EF Core 2.0 DbContext获取connectionString

EF Core是否支持通用的抽象基础实体?

.NET CORE 2 EF包含

同时使用EF Core IdentityContext和DbContext进行订单管理

在异步方法完成之前就将EF Core DbContext处理掉

.Net EF Core 2.1从IQueryable参数获取DbContext

ASP.NET Core 2:UserManager与DbContext

使用LINQ-EF Core 2通过DI DbContext和模型对控制器进行单元测试

从动态导入的DLL加载EF Core 2 DbContext

在EF Core 2.1中的DbContext上执行RAW SQL

在EF Core中配置抽象基类而不创建表

XUnit测试的EF Core DbContext并发问题

在EF7 / .Net Core 3中是否有一种很好的模式来实现抽象的DbContext以避免跨项目重复共享实体/配置?

在ASP.NET Core WebApplicationFactory中重写EF Core DbContext

Scaffold-DbContext存储过程仅在EF Core中

Net Core Worker Windows服务中的EF Core DBContext

如何使用EF Core中的DbContext基类访问实体?

.NET Core EF core中对dbcontext的并行调用

EF Core - 一次性 DbContext 和 Attach() - 或 - DbContext 作为成员 - 或 - 断开连接的实体

相同的 DbContext,使用 EF Core 的多个数据库

跨多个 DbContext 的 EF Core 事务与队列消息

单例服务和 EF Core dbContext

使 ef core DbContext 瞬态是一个坏主意吗?

用于 EF Core 和 EF 6 的 .Net 标准库 DbContext

如何使用抽象类型的导航属性实现基于 EF Core 抽象的模型

从 DBContext EF Core 创建 SQL 数据库

ef-core 中的 DbContext 与 DbcontextPool

ef-core 中的 DbContext 和 DbcontextPool