当 DbContext 有额外的构造函数参数时,如何将 LinqPad 连接到 EF Core 模型?

问题描述 投票:0回答:1

我有一个 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
1个回答
0
投票

从 LINQPad v8.4.11 开始,您可以向接受

DbContextOptions<AppDbContext>
的构造函数添加额外的参数:

public AppDbContext(DbContextOptions<AppDbContext> options, string tenantId = null) 
{
    ...

请注意,任何额外参数都必须是可选的(即具有默认值),以便 LINQPad 仍然可以调用它们。

© www.soinside.com 2019 - 2024. All rights reserved.