我正在ASP.NET Core 1.1中构建Web API。

我有许多不同的数据库(用于不同的系统),它们具有用于配置项(例如配置,用户和组)的公共(public)基本模式(总共约25个表)。我试图避免通过从图中的基类继承而为模型的共享部分复制非常广泛的EF配置。

entity-framework - 如何在EF7/.NET Core中为多个数据库实现DbContext继承-LMLPHP

但是,由于 Entity Framework (EF)要求将DbContextOptions<DerivedRepository>作为参数传递给构造函数,因此这不起作用,其中DerivedRepository必须与调用构造函数的存储库类型匹配。然后必须通过调用DbContext将参数向下传递给基本:base(param)

因此,(例如)使用DbContextOptions<InvestContext>初始化InvestContext时,它将调用base(DbContextOptions<InvestContext>),并且EF引发错误,因为对ConfigurationContext构造函数的调用接收的是DbContextOptions<InvestContext>类型的参数,而不是所需的DbContextOptions<ConfigurationContext>类型。由于DbContext上的options字段定义为

    private readonly DbContextOptions _options;

我看不到解决办法。

一次定义共享模型并多次使用的最佳方法是什么?我想我可以创建一个辅助函数并从每个派生上下文中调用它,但是它不像继承那样干净或透明。

最佳答案

我想引起大家的注意this post from the OP's GitHub issue:


public class MainDbContext : DbContext {
    public MainDbContext(DbContextOptions<MainDbContext> options)
        : base(options) {
    }

    protected MainDbContext(DbContextOptions options)
        : base(options) {
    }
}

public class SubDbContext : MainDbContext {
    public SubDbContext (DbContextOptions<SubDbContext> options)
        : base(options) {
    }
}

关于entity-framework - 如何在EF7/.NET Core中为多个数据库实现DbContext继承,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41829229/

10-10 22:55