0

最初に Entity Framework コードを使用しており、テーブルの作成時に固定エントリで初期化する必要がある 2 つのテーブルがあります。例えば:

テーブル A の列:

-Id
-Name

テーブル B の列:

-Id
-Name

テーブルの作成時に、テーブルごとに以下の情報を追加する必要があります。

テーブル A の場合:

Id Name
1  "Name_A1"
2  "Name_A2"
3  "Name_A3"
4  "Name_A4"

テーブル B については、多かれ少なかれ同じである必要があります。

1  "Name_B1"
2  "Name_B2"
3  "Name_B3"
4  "Name_B4"
5  "Name_B5"
6  "Name_B6"
7  "Name_B7"
8  "Name_B8"

では、これを達成する方法は?メソッド Seed をオーバーライドし、そこにそれらのレジストリを追加することを考えました (ハードコードされています) が、それが最善の解決策であるかどうかはわかりません。開発段階では、このメソッドをオーバーライドしてテーブルに情報を追加することをお勧めしますが、アプリケーションが顧客にデプロイされたら、開発マシンでエンティティ フレームワークによってデータベースを作成してから実行することをお勧めします。それをエクスポートして顧客のコンピューターにインポートし、最終的にこれらのテーブルに固定エントリを入力します。

4

2 に答える 2

2

あなたとラファエルが述べたように、次のSeed()方法を使用できます。

protected override void Seed(MyContext context)
{
    context.A.AddOrUpdate
    (
        a => a.Name,
        new A { Name="Name_A1" },
        new A { Name="Name_A2" },
        new A { Name="Name_A3" },
        new A { Name="Name_A4" }
    );
    context.SaveChanges();

    context.B.AddOrUpdate
    (
        b => b.Name,
        new B { Name="Name_B1" },
        new B { Name="Name_B2" },
        new B { Name="Name_B3" },
        new B { Name="Name_B4" },
        new B { Name="Name_B5" },
        new B { Name="Name_B6" },
        new B { Name="Name_B7" },
        new B { Name="Name_B8" }
    );
    context.SaveChanges();  
}

を使用AddOrUpdateすると、データベースに重複データが挿入されなくなります。最初のパラメーターでa => a.Nameある により、EF は各エンティティを識別できます。ID はエンティティの PK 値である可能性がありますが、DB がこれらを生成している場合、値がわからないため、を使用して が存在するAddOrUpdateかどうかを確認しますName。そうでない場合は、新しいレコードが挿入されます。一致が見つかった場合、エンティティが更新されます。もちろん、各エンティティを一意に識別するものを使用することを決定するのはあなた次第です。

于 2013-05-17T17:10:52.060 に答える
0

EF 移行を使用して、最初に powershell コンソールで次のコマンドを使用して、プロジェクトで EF 移行を有効にする必要があります。

Enable-Migration -ContextTypeName yourContextName

上記のコマンドは Migration というフォルダーを作成し、構成ファイルでシードメソッドをオーバーライドできます

シードメソッドをオーバーライドするだけです:

 protected override void Seed(MyContext context)
 {
        context.tableA.AddOrUpdate(
             p => p.Name,
             new tableA { Name = "Name_A1" },
             new tableA { Name = "Name_A2" },
             new tableA { Name = "Name_A3" },
             new tableA { Name = "Name_A4" }
        );

        context.tableB.AddOrUpdate(
             p => p.Name,
             new tableB { Name = "Name_B1" },
             new tableB { Name = "Name_B2" },
             new tableB { Name = "Name_B3" },
             new tableB { Name = "Name_B4" }
        );
 }

上記のメソッドに、郵便番号のリスト、国のリストなどのルックアップ データを定義できます。

于 2013-05-17T17:15:26.937 に答える