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

编辑 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 回答