Entity Framework Code FirstとCode First Migrationsを使用しています。
移行中、新しいテーブルを作成し、そこにデータを挿入する必要があります。
だから私はテーブルを作成します:
CreateTable("MySchema.MyNewTable",
c => new
{
MYCOLUMNID = c.Int(nullable: false, identity: true),
MYCOLUMNNAME = c.String(),
})
.PrimaryKey(t => t.MYCOLUMNID);
それから私はでデータを挿入しようとします:
using (var context = new MyContext())
{
context.MyNewTableDbSet.AddOrUpdate(new[]
{
new MyNewTable
{
MYCOLUMNNAME = "Test"
}
});
context.SaveChanges();
}
しかし、エラーが発生します:
無効なオブジェクト名 'mySchema.MyNewTable'。
必要なことを行うことはできますか?同じ移行でテーブルを作成し、それにデータを挿入しますか?
テーブルを作成したり、テーブルにデータを挿入したりする他の移行はすでに行っていますが、同じ移行ではありません...
私の推奨は、コードを Seed メソッドに挿入することです。 Migrationsは DbMigrationsConfiguration クラスに独自のSeed
メソッドを導入しました。このSeed
メソッドは、2つの重要な点でデータベース初期化子Seed
メソッドとは異なります。
Update-Database
PowerShellコマンドが実行されます。 Migrationsイニシャライザが使用されていない限り、アプリケーションの起動時にMigrations Seed
メソッドは実行されません。その最後の理由から、AddOrUpdate
メソッドでSeed
拡張メソッドを使用すると便利です。 AddOrUpdate
は、エンティティがデータベースにすでに存在するかどうかを確認し、存在しない場合は新しいエンティティを挿入するか、存在する場合は既存のエンティティを更新します。
したがって、この方法で必要なスクリプトを実行してみてください。
Update-Database –TargetMigration: ScriptName
そして、Seed
メソッドはデータを挿入する仕事をします。
ジュリー・ラーマンが彼女に言ったように blog :
AddOrUpdateの役割は、開発中にデータをシードするときに重複を作成しないようにすることです。
このアプローチを試すことができます。テーブルを作成した後、次を使用してパッケージマネージャーコンソールで別の空の移行を作成します。
_Add-Migration "MigrationName"
_
次に、その移行の_.cs
_ファイルを開き、Up()
メソッドに次のコードを挿入します。
_Sql("INSERT INTO MyNewTable(NyColumnName) Values('Test')");
_
その後、保存してパッケージマネージャーコンソールに戻り、次のコマンドを使用してデータベースを更新します。
_Update-Database
_
移行で「ランダム」なことを行う方法は、 Sql method を使用して、データの挿入など、実行する必要のあるSQLステートメントを渡すことです。
これは、移行でデータ操作を含む完全な移行SQLスクリプトを生成できるようにする場合に最適なアプローチです(Seedメソッドはコードでのみ実行でき、何も生成しません) sqlスクリプト)。
_EF Core
_ソリューションを探している人のために、Up
メソッドで、テーブルを作成した後:
つまり、_migrationBuilder.CreateTable(name: "MyTable", .....
_
次のコードを追加します。
migrationBuilder.InsertData(table: "MyTable", column: "MyColumn", value: "MyValue");
または
migrationBuilder.InsertData(table: "MyTable", columns: ..., values: ...);
詳細については、ドキュメントを参照してください。 MigrationBuilder.InsertDataメソッド