我想在seed()方法中更改一些代码创建数据,当我在控制台中编写 Update-Database
命令并按'enter'时,结果我在数据库中具有相同的数据,例如在更改之前。
例如,当我必须从年龄= 15更改到年龄= 20时,我保存更改并放置" Update-Database"命令。但是在数据库中,我仍然有年龄=15。我知道和工作的一个选项是删除迁移文件夹,更改ConnectionsRings中数据库的名称,然后放置命令Enable-Migrations
,Add-migration
,Update-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()