加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 06:14:51 所属栏目:百科 来源:网络整理
导读:我目前有一个asp.net MVC 4应用程序,它包含Entity框架6 Code First模型,DbContext和Migrations.为了将它与我的Web应用程序分开,以便我可以在另一个项目中重用这些数据库类,我已将所有相关的Entity Framework类移动到它们自己的项目中. 但是现在当我运行解决
我目前有一个asp.net MVC 4应用程序,它包含Entity框架6 Code First模型,DbContext和Migrations.为了将它与我的Web应用程序分开,以便我可以在另一个项目中重用这些数据库类,我已将所有相关的Entity Framework类移动到它们自己的项目中.

但是现在当我运行解决方案时,它认为我的模型已经更改并尝试再次运行我的所有迁移.问题似乎在于我使用SetInitializer,好像我注释掉了这一行,我可以正常运行Web应用程序.

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);
    }
}

在我尝试移动所有Entity Framework类之前,这不是问题.这是不可能的,还是我做了一些根本错误的事情?

解决方法

在启动时,EF6查询退出数据库中的迁移,存储在__MigrationHistory表中.该表的一部分是上下文密钥,其中包括实体的名称空间.

如果将所有内容移动到新的命名空间,则EF6无法识别任何先前运行的迁移,并尝试重建数据库.

一个快速的解决方案是运行一个脚本,将__MigrationHistory表中的上下文键重命名为新的命名空间.从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'

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读