我正在使用ASP.NET Core 1.1构建Web API。
我有许多不同的数据库(针对不同的系统),其中有共同的基本架构,例如Configuration、Users和groups等配置项(总共约25个表)。我试图通过从基类继承来避免复制相当广泛的EF共享模型的配置,如图所示。
然而,这行不通,因为Entity Framework(EF)要求将DbContextOptions<DerivedRepository>
作为参数传递给构造函数,其中DerivedRepository
必须与调用构造函数的仓储类型匹配。然后必须通过调用:base(param)
将参数传递到基本的DbContext
。
因此,当(例如)使用DbContextOptions<InvestContext>
初始化InvestContext时,它会调用base(DbContextOptions<InvestContext>)
,并且EF会抛出一个错误,因为对ConfigurationContext
构造函数的调用正在接收类型为DbContextOptions<InvestContext>
而不是所需类型的参数DbContextOptions<ConfigurationContext>
。由于DbContext上的选项字段是定义为
private readonly DbContextOptions _options;
我看不出有什么解决办法。
最好的方法是定义一次共享模型并多次使用它。我猜我可以创建一个帮助函数并从每个派生上下文中调用它,但这远没有继承那么干净或透明。
builder.Services.AddDbContext
。 - Jean-Daniel Gasser