【发布时间】:2016-03-17 01:46:57
【问题描述】:
关于这个问题:MVC 5 Seed Users and Roles 我尝试设置默认用户种子。 我在 Configuration.cs 中尝试的方式是:
var passwordHash = new PasswordHasher();
string defaultPassword = passwordHash.HashPassword("SuperPassword");
context.Users.AddOrUpdate(u => u.UserName,
new ApplicationUser
{
UserName = "admin@project.loc",
Email = "admin@project.loc",
PasswordHash = defaultPassword
});
但是现在我遇到了无法使用命令迁移数据库的问题。不幸的是,对其他人有用的解决方案对我没有帮助。
当我尝试更新数据库时出现错误:
数据库中已经有一个名为“AspNetRoles”的对象。
我尝试使用 Add-Migration <name> -IgnoreChanges,但收到错误,即迁移仍在等待中。
之前我尝试为我的两个上下文启用迁移,但对于一个我收到以下错误消息:
不支持创建 DbModelBuilder 或从使用 Database First 或 Model First 创建的 DbContext 编写 EDMX。 EDMX 只能从不使用现有 DbCompiledModel 创建的 Code First DbContext 中获取。
其他上下文的启用迁移只是用自定义种子覆盖了我的 Configuration.cs。
【问题讨论】:
-
您可以使用空的
Up和Down方法添加迁移。有时 EF 与数据库不同步,需要“同步”迁移才能恢复正常。即:运行Add-Migration sync,然后手动查看并删除 up/down 方法中已经存在的架构更改(即使这意味着让这些方法什么也不做)。 -
我会尝试这样做,但如何取消挂起的迁移?现在有像 Ctrl + C 这样的快捷键,不是吗?
-
如果取消它们,您的意思是完全摆脱它们;您只需要删除迁移文件。如果取消的意思是“这次不要跑”,我认为这是不可能的——至少在不积极对抗 EF 的情况下是不可能的(我不推荐)
-
也就是说,当您删除迁移文件并再次运行
Add-Migration时,已删除的更改也会出现在新的迁移文件中(您可以手动删除/编辑)
标签: c# entity-framework seeding