2012-05-09 8 views
3

(シード)は、どのようにしてEntity Frameworkで多くの静的データを作成できますか?静的なデータとは、データベースにあるデータを意味しますが、一度だけ存在します。Entity Frameworkを使用して静的データを使用してデータベースにシードを設定するにはどうすればよいですか?

たとえば、私のデータベースには、地球上のすべての国を含むCountrySetがあります。私はこれらの国々が常にそこにいることを望んでいますが、実際には、データベースを一掃して新しい展開用に再作成するたびに、そのデータはすべて失われます。

アプリケーションの起動時にすべてを作成する(まだ作成されていない場合)場合は、かなり時間がかかるようです。

ここでは何ができますか?

答えて

4

まず第一に、私はこれを聞いてみましょう:

は、あなたがあなた自身のInitializerを設定するときにへのアクセスを得るSeed機能に精通していますか?

例:あなたの主な機能の書き込みで

このような何か:SystemContextあなたDbContextクラスです

System.Data.Entity.Database.SetInitializer(new SystemContext.SystemInitializer()); 

そして、そのクラスにあなたのような何かを持っている必要があります:私はあちこちに散らばっていたプロジェクトからちょうどいくつかのテンプレートコードです

public class SystemContext : DbContext 
    { 
     public DbSet<Stock> Stocks { get; set; } 
     public DbSet<RawDayValues> StockRawValues { get; set; } 

     public SystemContext() 
      : base("Server=localhost;Database=test;Trusted_Connection=True;") 
     { } 

     public class SystemInitializer : DropCreateDatabaseIfModelChanges<SystemContext> 
     { 
      #region SEED 
      // This is what you're looking for! 
      protected override void Seed(SystemContext context) 
      { 
       try 
       { 
        var stock = new Stock() { Symbol = "TEST" }; 
        context.Stocks.Add(stock); 
        context.SaveChanges(); 
       } 
       catch (Exception ex) { Console.Error.WriteLine(ex.Message); } 
       base.Seed(context); 
      } 

      #endregion 
     } 
    } 

を。

毎回実際にデータベースを再作成している場合は、すべてのデータを手動で追加することなくデータベースを「シード」する方法はわかりません。

一方、あなたはデータベースをドロップ以外の何かをすることを予定している場合、あなたがそれに細部を変更するたびに、あなたが応じてすべての新しいデータをクリア手動書き込み機能を持っているかもしれませんがいくつかの論理に。

私は、これは、あなたの質問に答える:)

ALSO願っています:あなたは質問にも、あなたが話している技術のタグを使用してどちらも指定されていませんでした。私はそれが,と仮定しました。そうでない場合は、再度タグ付け/指定してください。 'MyInitializer' はIDatabaseInitializer<MyContext>インタフェースを継承するクラスである

System.Data.Entity.Database.SetInitializer<MyContext>(new MyInitializer());

は、あなたが例えば、コンテキストの初期化子を設定することができます素敵な一日:)

+0

+1 a-z説明付きの返事を見てうれしいです! –

1

を持っています。このインタフェースはメソッドInitializeDatabase(TContext context)を持ち、このメソッドはデータベースが(再)作成されるたびに呼び出されます。

この方法では、dbに値を設定することを意味するものを使用できます。

関連する問題