Entity Frameworkコア移行を自身のアセンブリに加える方法
私たちがしたいことは、簡単にメンテナンスのための独自のプロジェクト/アセンブリ内の移行を格納し、マイグレーション特定のコードを生産バイナリから維持することです.また、私たちのスタートアッププロジェクトが移行特定のライブラリに依存することを望まない.
この例では、私たちはすでにプロジェクトを
それはこのように見えるかもしれない
新しい移行クラスライブラリを作成する
我々は移動を保持するための新しいクラスライブラリを作成することから始めます
呼ばれる
MyAppから.インフラ.移行フォルダ
dbcontextを含むプロジェクトへの参照を追加する
Entity Frameworkの移行ツールでは、異なるプロジェクトにあるDBContextを見つける必要がありますので、MyAppを参照する必要があります.インフラプロジェクト
MyAppから.インフラ.移行フォルダ
実装の実装
Startupプロジェクトを使用する必要がないようにするには、IsDesignTimeBitContextFactoryを実装し、移行ツールが適切なDBContextファイルを見つけることができます.そこで、ApplicationDBContextFactoryという新しいファイルを生成します.コード付きCS
アプリケーション.cs
AppSettingsを作成することで行います.我々の移行クラスライブラリの中のJSONファイル
appsettingsJSON
移行を加える
マイグレーションを実行し、新しいプロジェクトの中にマイグレーションフォルダの構造を作成します
MyAppから.インフラ.移行フォルダ
この例では、私たちはすでにプロジェクトを
それはこのように見えるかもしれない
MyApp.Web.Api <-- ASP.Net Project
MyApp.Application <-- Class Library
MyApp.Domain <-- Class Library
MyApp.Infrastructure <-- Class Library (contains DBContext)
新しい移行クラスライブラリを作成する
我々は移動を保持するための新しいクラスライブラリを作成することから始めます
呼ばれる
MyApp.Infrastructure.Migrations
dotnet new classlib -n MyApp.Persistence.Migrations
我々はマイクロソフトにリファレンスを追加します.EntityFrameworkcoreとマイクロソフト.EntityFrameworkCore.デザイン.ツールキットがマイグレーションスクリプトを検出して生成できるようにするためにMyAppから.インフラ.移行フォルダ
dotnet add package Microsoft.EntityFrameworkCore --version 5.0.1
dotnet add package Microsoft.EntityFrameworkCore.Design --version 5.0.1
dbcontextを含むプロジェクトへの参照を追加する
Entity Frameworkの移行ツールでは、異なるプロジェクトにあるDBContextを見つける必要がありますので、MyAppを参照する必要があります.インフラプロジェクト
MyAppから.インフラ.移行フォルダ
dotnet add reference ../MyApp.Infrastructure/MyApp.Infrastructure.csproj
実装の実装
Startupプロジェクトを使用する必要がないようにするには、IsDesignTimeBitContextFactoryを実装し、移行ツールが適切なDBContextファイルを見つけることができます.そこで、ApplicationDBContextFactoryという新しいファイルを生成します.コード付きCS
アプリケーション.cs
using System;
using System.IO;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Design;
using Microsoft.Extensions.Configuration;
using MyApp.Infrastructure;
namespace MyApp.Infrastructure.Migrations
{
public class ApplicationDbContextFactory : IDesignTimeDbContextFactory<ApplicationDbContext>
{
public ApplicationDbContext CreateDbContext(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", true)
.AddEnvironmentVariables()
.Build();
var builder = new DbContextOptionsBuilder();
var connectionString = configuration
.GetConnectionString("DefaultConnection");
builder.UseSqlServer(connectionString,
x => x.MigrationsAssembly(typeof(ApplicationDbContextFactory).Assembly.FullName));
return new ApplicationDbContext(builder.Options);
}
}
}
私たちは、ツールを我々の移動ライブラリから直接DBContextに初期化して、接続文字列を提供する必要があります.AppSettingsを作成することで行います.我々の移行クラスライブラリの中のJSONファイル
appsettingsJSON
{
"ConnectionStrings": {
"DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=myapp;Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
移行を加える
マイグレーションを実行し、新しいプロジェクトの中にマイグレーションフォルダの構造を作成します
MyAppから.インフラ.移行フォルダ
dotnet ef migrations add InitialCreate
Reference
この問題について(Entity Frameworkコア移行を自身のアセンブリに加える方法), 我々は、より多くの情報をここで見つけました https://dev.to/dzenand/adding-entity-framework-core-migrations-to-own-assembly-4kafテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol