自定义Db初始化程序中的种子数据无法工作/ EF,Code First

时间:2012-04-14 08:02:13

标签: entity-framework ef-code-first

我正在尝试使用自定义数据库初始化程序来播种一些数据,但无法使其工作。我尝试将一些配置添加到appConfig文件,但这也不起作用。

这是一个WPF应用程序,我不想引用我的EntityLibrary。我想使用上下文的构造函数来种子数据。怎么了?

编辑:问题是没有填充数据。调试时我看到上下文的构造函数SetInitiazlier函数被调用但是被覆盖的种子方法永远不会被调用,事实上调试器永远不会进入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 = "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());
    }

编辑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);
        }
    }

1 个答案:

答案 0 :(得分:3)

将初始化代码移至应用程序启动。它不属于上下文的构造函数和手动强制初始化:

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