2012-04-14 4 views
1

カスタムデータベース初期化子を使用してデータをシードしようとしていますが、動作させることができません。 appConfigファイルにいくつかの設定を追加しようとしましたが、それもうまくいきませんでした。カスタムDbイニシャライザのシードデータは機能しません/ EF、コードファースト

これはWPFアプリケーションであり、EntityLibraryを参照したくありません。コンテキストのコンストラクタを使用してデータをシードしたいと思います。どうしたの?

編集:データが入力されないという問題があります。デバッグ時には、コンテキストのコンストラクターSetInitiazlier関数が呼び出されますが、オーバーライドされたSeedメソッドは呼び出されません。実際、デバッガーはSeedメソッドを使用しません。

同時に、XAMLパーサーは、TContext型のパラメーター、つまり、 DropCreateDatabaseIfModelChangesについてエラーを返します。私は自宅でコードを持っていないので、私は正確なエラーを与えることはできません。

これは私のカスタム初期化子です:

public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext> 
    { 
     protected override void Seed(DemirbaşContext context) 
     { 
      Kullanıcı kullanıcı = new Kullanıcı 
      { 
       Ad = "Mert", 
       Soyad = "Mert", 
       KullanıcıAdı = "admin", 
       Şifre = "password", 
       Email = "[email protected]" 
      }; 

      context.Kullanıcılar.Add(kullanıcı); 
      context.SaveChanges(); 

      base.Seed(context); 
     } 
    } 

これは私のコンテキストコンストラクタです:

public DemirbaşContext():base("Demirbaş") 
    { 
     Database.SetInitializer<DemirbaşContext>(new DbInitializer()); 
    } 

EDIT 1:ここに私の現在のコードですが、まだそれがデータをシードしません。あなたは何が間違っているのか分かりますか?

イニシャライザ:

public class DbInitializer : DropCreateDatabaseIfModelChanges<DemirbaşContext> 
{ 
    protected override void Seed(DemirbaşContext context) 
    { 
     Kullanıcı kullanıcı = new Kullanıcı 
     { 
      Ad = "Mert", 
      Soyad = "Mert", 
      KullanıcıAdı = "admin", 
      Şifre = "password", 
      Email = "[email protected]" 
     }; 

     context.Kullanıcılar.Add(kullanıcı); 
     context.SaveChanges(); 

    } 
} 

アプリケーションの起動:

public partial class App : Application 
    { 
     public App() 
     { 
      // Seed data, remove after getting seeding in custom db initiazlier to work 
      DemirbaşContext context = new DemirbaşContext(); 
      DbInitializer initializer = new DbInitializer(); 
      Database.SetInitializer<DemirbaşContext>(initializer); 
      context.Database.Initialize(false); 
     } 
    } 
+1

*カスタムデータベース初期化子を使用してデータをシードしようとしていますが、動作させることができません。 appConfigファイルにいくつかの設定を追加しようとしましたが、それもうまくいきませんでした。*問題の説明ではありません。 *実際に何が起こっているのか(例外、データベース、データなしなど)を説明せずに*動作しないことを確認するたびに、私はdownvotingを検討し、 "本当の質問ではない"という質問を閉じることを検討しています。良い説明的な質問をすることは、答えを得るために必要なステップです。 –

+0

あなたは正しいです。私はその質問を編集した。今はっきりしていることを願っています。 –

+0

アプリケーションで実際にEFを使用しましたか?データベースから何かを読み込んだり、何かをデータベースに保存したりしますか? –

答えて

3
は、アプリケーションの起動時に初期化コードを移動し

。コンテキストのコンストラクタに属しておらず、手動で初期化を強制します。

Database.SetInitializer<DemirbaşContext>(new DbInitializer()); 
context.Database.Initialize(false); 
+0

EF 4.3.1のDatabaseクラスにはInitializeメソッドがありません。5.0ベータが付属していると思います。 4.3.1のオプションは何ですか? –

+0

すみません。それはインスタンスメソッドです - 私は答えを変更しました。 –

関連する問題