1

カスタム データベース初期化子を使用していくつかのデータをシードしようとしていますが、動作させることができません。appConfig ファイルにいくつかの構成を追加しようとしましたが、それもうまくいきませんでした。

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

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

同時に、XAML パーサーは、DropCreateDatabaseIfModelChanges の TContext 型パラメーターについて不平を言うエラーを返します。自宅にコードがないため、正確なエラーを示すことはできません。

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

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 = "mert@mert.com"
            };

            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 = "mert@mert.com"
        };

        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);
        }
    }
4

1 に答える 1

4

初期化コードをアプリケーションのスタートアップに移動します。コンテキストのコンストラクターに属しておらず、手動で初期化を強制します。

Database.SetInitializer<DemirbaşContext>(new DbInitializer());
context.Database.Initialize(false);
于 2012-04-14T20:43:50.823 に答える