1

EF を使用していない古いデータベースのバックアップ ファイルがあります。ここで、階層ごとのテーブルを持つ EF コードの最初の流暢な API を使用して新しいデータベースを作成します。そのため、null 不可の識別子列があります。私のバックアップファイルにはディスクリミネーターがありません。そのため、古いバックアップ ファイルを復元しようとすると、識別子列に NULL 値を挿入しようとするため、例外がスローされます。

ディスクリミネーター列に NULL を挿入するときに (EF の助けを借りて) デフォルト値を設定することは可能ですか?

編集: 復元はデータセットを使用して行われます。データセットに値を追加することはできますが、そのようにしたくありません。

4

1 に答える 1

1

EF を使用してデータベースを作成できます。次に、次の SQL コマンドを実行します。

context.Database.ExecuteSqlCommand("ALTER Table dbo.TABLENAME DROP COLUMN Discriminator");

その後、復元を実行できます。最後に手動で Discriminator を追加します。

context.Database.ExecuteSqlCommand("ALTER Table dbo. TABLENAME ADD
Discriminator NVARCHAR(128) NOT NULL DEFAULT 'ClassName'");

複数のタイプを持つ階層ごとのテーブルがある場合は、Discriminator フィールドに正しいタイプを設定するために何らかの後処理が必要になる場合があります。

于 2014-08-21T10:52:40.380 に答える