实体框架代码优先:Configuration.cs 种子或自定义初始值设定项

2024-01-14

我第一次使用实体框架的 Code First 风格。我想设置一些默认数据。我遇到的第一个方法是创建一个自定义初始化程序 https://stackoverflow.com/questions/5655841/entity-framework-code-first-default-data-in-database。我正朝着这条路线前进,但在设置迁移后注意到它附带的 Configuration.cs 已经像自定义初始值设定项一样覆盖了种子方法。

internal sealed class Configuration : DbMigrationsConfiguration<Toolkit.Model.ToolkitContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
    }

    protected override void Seed(Toolkit.Model.ToolkitContext context)
    {
        //  This method will be called after migrating to the latest version.

        //  You can use the DbSet<T>.AddOrUpdate() helper extension method 
        //  to avoid creating duplicate seed data. E.g.
        //
        //    context.People.AddOrUpdate(
        //      p => p.FullName,
        //      new Person { FullName = "Andrew Peters" },
        //      new Person { FullName = "Brice Lambson" },
        //      new Person { FullName = "Rowan Miller" }
        //    );
        //
    }
}

所以看来有两种方法可以完成这项任务。有人可以阐明推荐的做法吗?或者这有什么关系,我应该抛硬币吗?


Configuration.cs Seed 方法将在每次模型更改时运行,以确保某些特定数据保留在数据库中,甚至可能将该数据重置为指定的默认设置。

另一方面,可以将自定义初始化程序种子方法设置为在每次应用程序加载时运行,如以下代码所示,该代码当前位于我的 MVC 页面的 Global.asax 文件中:

Database.SetInitializer(new MyCustomInitializer<MyDbContext, Configuration>());
var db = new MyDbContext();
db.Database.Initialize(true);

在部署应用程序后,实际差异才真正发挥作用。自定义初始化程序将确保没有用户可以破坏程序中绝对需要的某些数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

实体框架代码优先:Configuration.cs 种子或自定义初始值设定项 的相关文章

随机推荐