自数据库创建以来,支持 'DataContext' 上下文的模型已更改
The model backing the 'DataContext' context has changed since the database was created
我正在尝试将 Code First 与迁移结合使用。尽管我的模型当前没有任何变化,但我遇到了一个例外。当我添加迁移时,up 和 down 都是空的,但是我得到一个 运行time 错误消息如下:
An exception of type 'System.InvalidOperationException' occurred in
EntityFramework.dll but was not handled in user code
Additional information: The model backing the 'MyDataContext' context
has changed since the database was created. Consider using Code First
Migrations to update the database (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 table 中创建了一条记录,但是当我尝试 运行 应用程序时仍然收到错误。此外,种子数据未添加到数据库中。
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 在模型中没有发现任何变化,为什么我在 运行 时会收到此错误?为什么种子代码没有被命中?我该如何解决这个问题,或者如果无法确定,我该如何进一步确定根本原因?
我打赌你的数据上下文没有连接连接字符串。
检查它是否未使用 localdb 初始化(类似于 (localdb)\v11.0
)并且在您认为它设置为其他内容时未使用它。
我不确定您是否找到了问题的答案,但我在这里找到的另一个答案确实帮了我:
Entity Framework model change error
我实际上最终删除了 SQL 服务器中的 __MigrationHistory
table,我不知道它是自动创建的。
这篇文章还谈到了不生成它的选项我想通过使用这条指令:Database.SetInitializer<MyDbContext>(null);
但我没有使用过它,所以我不确定它是否像那样工作
这对我有用。
转到程序包管理器控制台并运行 - Update-Database -force
我的问题最终是启用的自动迁移与初始化程序 MigrateDatabaseToLatestVersion 之间的冲突,如 here 所述。
我正在尝试将 Code First 与迁移结合使用。尽管我的模型当前没有任何变化,但我遇到了一个例外。当我添加迁移时,up 和 down 都是空的,但是我得到一个 运行time 错误消息如下:
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.dll but was not handled in user code
Additional information: The model backing the 'MyDataContext' context has changed since the database was created. Consider using Code First Migrations to update the database (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 table 中创建了一条记录,但是当我尝试 运行 应用程序时仍然收到错误。此外,种子数据未添加到数据库中。
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 在模型中没有发现任何变化,为什么我在 运行 时会收到此错误?为什么种子代码没有被命中?我该如何解决这个问题,或者如果无法确定,我该如何进一步确定根本原因?
我打赌你的数据上下文没有连接连接字符串。
检查它是否未使用 localdb 初始化(类似于 (localdb)\v11.0
)并且在您认为它设置为其他内容时未使用它。
我不确定您是否找到了问题的答案,但我在这里找到的另一个答案确实帮了我: Entity Framework model change error
我实际上最终删除了 SQL 服务器中的 __MigrationHistory
table,我不知道它是自动创建的。
这篇文章还谈到了不生成它的选项我想通过使用这条指令:Database.SetInitializer<MyDbContext>(null);
但我没有使用过它,所以我不确定它是否像那样工作
这对我有用。
转到程序包管理器控制台并运行 - Update-Database -force
我的问题最终是启用的自动迁移与初始化程序 MigrateDatabaseToLatestVersion 之间的冲突,如 here 所述。