1. ホーム
  2. c#

[解決済み] ASP.NET Core 2.0にアップグレードした後、マイグレーションを作成できない

2022-10-04 03:21:37

質問

ASP.NET Core 2.0 にアップグレードしたら、マイグレーションを作成できなくなったようです。

次のようなメッセージが表示されます。

クラス 'Program' でメソッド 'BuildWebHost' を呼び出す際にエラーが発生しました。 'Program'上でメソッド 'BuildWebHost' を呼び出しているときにエラーが発生しました。アプリケーションサービスプロバイダなしで続行します。エラーです。 1つまたは複数のエラーが発生しました。(ログインで要求されたデータベース "..."を開くことができません。 を開けません。ログインに失敗しました。ユーザー '...'"'' のためのログインに失敗しました。

"タイプ 'MyContext' のオブジェクトを作成することができません。プロジェクトに IDesignTimeDbContextFactory'の実装をプロジェクトに追加するか、または、以下を参照してください。 https://go.microsoft.com/fwlink/?linkid=851728 を参照してください。 を参照してください。

以前実行したコマンドは $ dotnet ef migrations add InitialCreate --startup-project "..\Web" (DBContextのあるプロジェクト/フォルダから)を実行しました。

接続文字列です。 "Server=(localdb)\\mssqllocaldb;Database=database;Trusted_Connection=True;MultipleActiveResultSets=true"

これは私のProgram.csです。

 public class Program
{
    public static void Main(string[] args)
    {
        BuildWebHost(args).Run();
    }

    public static IWebHost BuildWebHost(string[] args) =>
       WebHost.CreateDefaultBuilder(args)
           .UseStartup<Startup>()
           .Build();
}

どのように解決するのですか?

Webプロジェクト内にIDesignTimeDbContextFactoryを実装したクラスを追加します。

以下はサンプルコードです。

public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<CodingBlastDbContext>
{
    public CodingBlastDbContext CreateDbContext(string[] args)
    {
        IConfigurationRoot configuration = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json")
            .Build();
        var builder = new DbContextOptionsBuilder<CodingBlastDbContext>();
        var connectionString = configuration.GetConnectionString("DefaultConnection");
        builder.UseSqlServer(connectionString);
        return new CodingBlastDbContext(builder.Options);
    }
}

次に、Databaseプロジェクトに移動して、コマンドラインから以下を実行します。

dotnet ef migrations add InitialMigration -s ../Web/

dotnet ef database update -s ../Web/

-s stands for startup project and ../Web/ is the location of my web/startup project.

リソース