将实体框架从 MVC 移动到另一个项目会导致重新迁移

2024-04-03

我目前有一个 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(使用前将#替换为@)

将实体框架从 MVC 移动到另一个项目会导致重新迁移 的相关文章

随机推荐