0

私は最初にSQL ServerをバックエンドとしてEFコアとコード・ファーストのアプローチ(このチュートリアルの後に:https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/new-db)を使用する単純なプロジェクトを持っています。EFコア - SQLServerへの移行はSQLiteに適用されますか?

実装をSQLiteに切り替えたいと思います。 SQL Serverからデータベースを作成するための初期移行を実行してSQLiteに適用できると思っていました。それが正しく動作しないようです:例えば。主キーの自動インクリメントが適用されていない場合、いくつかの矛盾('int'については、'INTEGER'であると不平を言います)が表示されます。

これは、移行がバックエンド依存であることを意味しますか?はいの場合は、ネストされたフォルダに作成しないでください(例:./Migrations/SQLServer)?

これはどのように動作するのですか?

注:申し訳ありませんが、私はEF Code-Firstと移行について初めて...ありがとうございます!

答えて

3

はい、移行はバックエンドによって異なります。各バックエンドには固有の特徴があるため、通常、マイグレーションには列指定のようなバックエンドの仕様があります。

一部のORMでは、抽象的な方法で「コードファースト」モデルをマップし、バックエンド固有のプロバイダがこの抽象モデルをバックエンドの特定のタイプにマップさせることができますが、比較的複雑なモデルでは、バックエンドに依存しません。あなたはあなたが、その後「DOTNETのEFを使用して、移行のための明示的なパスを指定することができます

services.AddDbContext<YourContext>(options => options.UseSqlite(Configuration.GetConnectionString("DefaultConnection")))

ような何かにあなたのDbContextあなたを登録し、あなたのStartup.csで設定を変更することができたSQLiteに移動するには

migrations add 'コマンドを実行します。 This質問に明示的なフォルダパスの設定に関する詳細があります。

+0

THXは、私が見ると私:あなたはまた、条件付きでバックエンドの間で根本的に異なる可能性がありますことを行うことができます

Id = table.Column<int>(nullable: false) .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn) .Annotation("Sqlite:Autoincrement", true); 

を:

例えば、Id列には、次のようになります。バックエンドの依存関係がなくても私のモデルをきれいに見てとてもうれしく、マイグレーションも独立していると私は考えていました。実際に私はパッケージマネージャコンソールから 'Add-Migration'と' Update-Database'コマンドを使用しました。うまくいけば、私はMigrationフォルダを設定するためにいくつかのパラメータを見つけることができますか? – Learner

+0

私はすでにこれも役立つかもしれません.. https ://docs.microsoft.com/en-us/ef/core/miscellaneous/cli/powershell – Learner

2

Add-Migration/dotnet ef migrations addコマンドで生成される移行は、バックエンド固有ですが、複数のバックエンドと互換性があるように手作業で編集できます。これを実行する最も簡単な方法は、@alwayslearning's answerで説明されているように2組の移行を生成し、それらを1つの移行セットに結合することです。 ..

if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.SqlServer") 
{ 
    // TODO 
} 
else if (migrationBuilder.ActiveProvider == "Microsoft.EntityFrameworkCore.Sqlite") 
{ 
    // TODO 
} 
関連する問題