我目前有一个 asp.net MVC 4 应用程序,其中包含实体框架 6 Code First 模型、DbContext 和迁移。为了尝试将其与我的 Web 应用程序分开,以便我可以在另一个项目中重复使用这些数据库类,我已将所有相关的实体框架类移至它们自己的项目中。
但是现在,当我运行该解决方案时,它认为我的模型已更改,并尝试再次运行所有迁移。问题似乎出在我的使用上SetInitializer
就像我注释掉这一行一样,我可以正常运行网络应用程序。
public static class DatabaseConfig
{
public static void Initialize()
{
System.Data.Entity.Database.SetInitializer(new MigrateDatabaseToLatestVersion<G5DataContext, Configuration>());
// make sure the database is created before SimpleMembership is initialised
using (var db = new G5DataContext())
db.Database.Initialize(true);
}
}
在我尝试移动所有实体框架类之前,这不是问题。这是不可能的,还是我做错了什么?
启动时,EF6 查询数据库中现有的迁移(存储在 __MigrationHistory 表中)。该表的一部分是上下文键,其中包括实体的名称空间。
如果将所有内容移动到新的命名空间,EF6 将无法识别任何先前运行的迁移,并会尝试重建数据库。
快速解决方案是运行脚本将 __MigrationHistory 表中的上下文键重命名为新的命名空间。从http://jameschambers.com/2014/02/changing-the-namespace-with-entity-framework-6-0-code-first-databases/ http://jameschambers.com/2014/02/changing-the-namespace-with-entity-framework-6-0-code-first-databases/ :
UPDATE [dbo].[__MigrationHistory]
SET [ContextKey] = 'New_Namespace.Migrations.Configuration'
WHERE [ContextKey] = 'Old_Namespace.Migrations.Configuration'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)