在更改种子()方法之后如何更新数据库



我想在seed()方法中更改一些代码创建数据,当我在控制台中编写 Update-Database命令并按'enter'时,结果我在数据库中具有相同的数据,例如在更改之前。

例如,当我必须从年龄= 15更改到年龄= 20时,我保存更改并放置" Update-Database"命令。但是在数据库中,我仍然有年龄=15。我知道和工作的一个选项是删除迁移文件夹,更改ConnectionsRings中数据库的名称,然后放置命令Enable-MigrationsAdd-migrationUpdate-Database,但我认为不是最佳解决方案。这是我的种子()方法:

protected override void Seed(Repository.Models.OglContext context)
        {
            var store = new UserStore<User>(context);
            var manager = new UserManager<User>(store);
            if (!context.Users.Any(u => u.UserName == "Admin"))
            {
                var user = new User { UserName = "Admin", Age = 115 };
                var adminresult = manager.Create(user, "12345678");
                if (adminresult.Succeeded)
                    manager.AddToRole(user.Id, "Admin");
            }
        }

如何解决我的问题?

您必须致电context.SaveChanges();,否则数据将不会存储!

  • 如果您有多个迁移级别,则必须使用dbset.addorupdate()
  • 另外,您还可以在迁移文件中更新数据库,如下所示:

    public partial class MigrationFile : DbMigration
    {
        public override void Up()
        {
            // Add or update the data
            Sql("UPDATE ...");
            Sql("INSERT ...");
        }
        public override void Down()
        {
            // Remove Data
        }
    }
    

您需要添加一个else语句以编辑用户:

var user = context.Users.Where(u => u.UserName == "Admin");
if (user == null))
{
    user = new User { UserName = "Admin", Age = 115 };
    var adminresult = manager.Create(user, "12345678");
    if (adminresult.Succeeded)
        manager.AddToRole(user.Id, "Admin");
}
else
{
    user.Age = 20;
}
context.SaveChanges()

最新更新