3

CodeFirstMigrationsでEntityFramework5を使用しています。私ができるようにしたいのは、ビルド構成に応じて異なるシードデータを指定することです。例えば:

protected override void Seed(EFDbContext context)
{
    // This will be run in every Build configuration
    context.Table1.AddOrUpdate(new Table1 { Field1 = "Foo", Field2 = "Bar" });

    #if DEBUG
    // This will only be executed if we are Debuging
    context.Table1.AddOrUpdate(new Table1 { Field1 = "Blah", Field2 = "De Blah" });
    context.Table2.AddOrUpdate(new Table2 { Field1 = "Development Only" });
}

コードがおそらく間違っていることはわかっています。これを行うための最適なルートがわかれば、正しいメソッド呼び出しを見つけることができます。

EFには、この種のことを行うために私が見逃した組み込みのメソッドがありますか?

ありがとう

アップデート

最後に使用したコードは次のとおりです。

protected override void Seed(EFDbContext context)
{
    // This will be run in every Build configuration
    context.Table1.AddOrUpdate(t = t.Field1, new Table1 { Field1 = "Foo", Field2 = "Bar" });

    #if DEBUG
        // This will only be executed if we are Debuging
        context.Table1.AddOrUpdate(t = t.Field2, new Table1 { Field1 = "Blah", Field2 = "De Blah" });
        context.Table2.AddOrUpdate(t = t.Field1, new Table2 { Field1 = "Development Only" });
    #endif
}

Yannickが言ったとおりでしたが、AddOrUpdateメソッドでは、EFが新しいエントリであるかどうかを確認するために使用するフィールドを渡す必要があります。私の質問の一部ではありませんが、将来の参考のために正しい方法を提供する必要があると思いました。

4

1 に答える 1

1

私はあなたがすでに正しいコードを持っていると思います(#endifステートメントを除いて)。

これは期待どおりに機能します。

protected override void Seed(EFDbContext context)
{
    // This will be executed in every Build configuration
    context.Table1.AddOrUpdate(new Table1 { Field1 = "Foo", Field2 = "Bar" });

    #if DEBUG
        // This will only be executed if DEBUG is defined, hence when you are debugging
        context.Table1.AddOrUpdate(new Table1 { Field1 = "Blah", Field2 = "De Blah" });
        context.Table2.AddOrUpdate(new Table2 { Field1 = "Development Only" });
    #endif
}
于 2012-10-23T10:25:13.933 に答える