自定义 Db 初始值设定项中的种子设定数据不起作用 / EF,代码优先



我正在尝试使用自定义数据库初始值设定项为一些数据播种,但无法使其工作。我尝试向appConfig文件添加一些配置,但这也不起作用。

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

编辑:问题是没有填充数据。调试时,我看到上下文的构造函数 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 = "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);
        }
    }

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

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

最新更新