我有一个 EF Core 模型,并且已经在 LinqPad 上成功使用该模型一段时间了。上下文类相当标准,添加了额外的构造函数和配置方法以方便 LinqPad 的使用...
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) {
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) {
if (AppDomain.CurrentDomain.FriendlyName.StartsWith("LINQPad")) {
optionsBuilder.UseLazyLoadingProxies();
}
}
protected AppDbContext(DbContextOptions options) : base(options) {
}
我现在需要向第一个构造函数添加一个附加参数...
public AppDbContext(DbContextOptions<AppDbContext> options, string tenantId) : base(options) {
}
但是,当我尝试从 LinqPad 查询时,这会出现异常,因为 LinqPad(大概)期望一个仅包含选项参数的构造函数,因此不知道为字符串提供什么。
我也可以通过保留原始构造函数来解决这个问题......
public AppDbContext(DbContextOptions<AppDbContext> options) : base(options) {
}
public AppDbContext(DbContextOptions<AppDbContext> options, string tenantId) : base(options) {
}
问题是,如果我这样做,那么我将无法运行代码,因为我收到运行时异常...
InvalidOperationException:在类型“MyProject.AppDbContext”中找到了接受所有给定参数类型的多个构造函数。应该只有一个适用的构造函数。
有人知道我可以做些什么来使我能够使用 LinqPad 中的 EF Core 模型而不阻止我运行我的代码吗?
谢谢
从 LINQPad v8.4.11 开始,您可以向接受
DbContextOptions<AppDbContext>
的构造函数添加额外的参数:
public AppDbContext(DbContextOptions<AppDbContext> options, string tenantId = null)
{
...
请注意,任何额外参数都必须是可选的(即具有默认值),以便 LINQPad 仍然可以调用它们。