【问题标题】:Add-Migration command has an error in my .NET 6 projectAdd-Migration 命令在我的 .NET 6 项目中出现错误
【发布时间】:2022-02-09 17:24:42
【问题描述】:

我有一个项目并使用 .NET 6 创建它。

在我的DbContext 中添加一些DbSet 之前,我使用了Add-Migration 命令,它工作正常并为我制作了迁移文件。

今天添加一个新的DbSet 到我的DbContext 之后使用Add-Migration 命令但我得到一个错误:

无法创建“HospitalNetDbContext”类型的对象。有关设计时支持的不同模式,请参阅https://go.microsoft.com/fwlink/?linkid=851728

我从这个链接获得了一些信息,但我无法解决我的问题。

有人建议在DbContext 类中使用没有参数的承包商,但是当我将此承包商添加到DbContext 类之后,我使用了Add-Migration 命令,我得到一个新的错误:

没有为此 DbContext 配置数据库提供程序。可以通过覆盖“DbContext.OnConfiguring”方法或在应用程序服务提供程序上使用“AddDbContext”来配置提供程序。如果使用了“AddDbContext”,那么还要确保您的 DbContext 类型在其构造函数中接受 DbContextOptions 对象并将其传递给 DbContext 的基本构造函数。

在这个错误之后,我添加了一个与下面相同的新构造函数,但我的问题仍然存在:

public HospitalNetDbContext(DbContextOptions<HospitalNetDbContext> options) : base(options)
{
}

关于我的项目的更多信息是定义到应用程序设置文件和启动文件中的连接字符串,使用下面的代码将连接字符串设置为DbContext,而不是添加到DbContext 类中的覆盖OnConfiguring 方法中。

services.AddDbContext<HospitalNetDbContext>(x => x.UseSqlServer(Configuration.GetConnectionString("HospitalNetDb")));

【问题讨论】:

  • 我通过在 OnConfiguring 方法中添加以下代码解决了这个问题 => optionsBuilder.UseSqlServer(@"MyConnectionStrig");

标签: c# .net-core entity-framework-core entity-framework-migrations


【解决方案1】:

我遇到了同样的错误,问题是我没有指定启动项目和目标项目。

我使用的继承自 DbContext 的类位于与启动项目不同的数据访问项目中,我认为这意味着如果不指定启动项目,program.cs 中的配置在尝试运行时没有运行初始化上下文类,这就是它失败的原因。当我这样运行它时,它起作用了:

Add-Migration -Name MyNewMigration -StartupProject {startup project name} -Project {project containing HospitalNetDbContext}

这个页面对我很有帮助https://docs.microsoft.com/en-us/ef/core/cli/powershell#target-and-startup-project

【讨论】:

    【解决方案2】:

    在我的项目中,我在 DbContext 中有 2 个构造函数,一个为空的,一个带有 DbContextOptions。还要检查以覆盖 DbContext 中的 OnConfiguring 方法。

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2019-11-15
      • 2020-02-26
      • 1970-01-01
      • 2021-03-06
      • 2017-02-17
      • 2022-06-17
      • 1970-01-01
      • 2016-11-04
      相关资源
      最近更新 更多