【发布时间】:2015-04-01 07:55:20
【问题描述】:
我正在尝试将 Code First 与迁移一起使用。即使我的模型当前没有更改,我也遇到了一个例外。添加迁移时,上下都是空的,但出现运行时错误,消息如下:
“System.InvalidOperationException”类型的异常发生在 EntityFramework.dll 但未在用户代码中处理
附加信息:支持“MyDataContext”上下文的模型 自创建数据库以来已更改。考虑使用代码优先 迁移以更新数据库 (http://go.microsoft.com/fwlink/?
我的架构如下:
- 包含上下文、流体配置和迁移代码的 DataAccess 项目
- 包含 poco 类的模型项目
- Web API 和 MVC 项目在各自的 web.config 文件中都包含连接字符串。
另外我有以下代码:
DbInitializer
public static MyDataContext Create()
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDataAccess.MyDataContext, MyDataAccess.Migrations.Configuration>());
return new MyDataContext(ConfigurationManager.ConnectionStrings["MyDataContext"].ConnectionString, null);
}
我从 AutomaticMigrationsEnabled = false 开始;在迁移配置构造函数中,因为据我了解,这将允许(并要求)我对何时应用迁移有更多控制权。我也尝试将其设置为 true,但结果相同。
收到此错误后,我添加了一个新迁移,并且 Up 方法为空。我将数据库更新为这个新的迁移,并在 _migrationHistory 表中创建了一条记录,但是当我尝试运行应用程序时仍然收到错误消息。此外,种子数据没有添加到数据库中。
protected override void Seed(MyDataAccess.MyDataContext context)
{
IdentityResult ir;
var appDbContext = new ApplicationDbContext();
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(appDbContext));
ir = roleManager.Create(new IdentityRole("Admin"));
ir = roleManager.Create(new IdentityRole("Active"));
ir = roleManager.Create(new IdentityRole("InActive"));
var userNamager = new UserManager<User>(new UserStore<User>(appDbContext));
// assign default admin
var admin = new User { UserName = "administrator", Email = "myAdmin@gmail.com" };
ir = userNamager.Create(admin, "myp@55word");
ir = userNamager.AddToRole(admin.Id, "Admin");
}
在哪里
public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
: base("MyDataContext", throwIfV1Schema: false)
{
}
...
问题:如果 Add-Migration 在模型中没有看到任何变化,为什么我在运行时会收到此错误?为什么没有命中种子代码?我该如何解决这个问题,或者如果无法确定,我如何进一步确定根本原因?
【问题讨论】:
标签: entity-framework ef-code-first entity-framework-migrations