Entity framework 首先使用EF代码更改数据库模式时,最简单的方法是什么

Entity framework 首先使用EF代码更改数据库模式时,最简单的方法是什么,entity-framework,ef-code-first,Entity Framework,Ef Code First,我第一次接触EF代码。我在生产中有一个现有的数据库,我首先使用了EF 4.3.1代码,一切正常。现在,我刚刚更新了数据库模式并得到了异常 System.InvalidOperationException: The model backing the 'MyDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database

我第一次接触EF代码。我在生产中有一个现有的数据库,我首先使用了EF 4.3.1代码,一切正常。现在,我刚刚更新了数据库模式并得到了异常

System.InvalidOperationException: The model backing the 'MyDbContext' context has changed since the database was created. Consider using Code First Migrations to update the database (http://go.microsoft.com/fwlink/?LinkId=238269).
我不能使用
DropCreateDatabaseIfModelChanges
,因为它正在生产中,处理模式更改的最简单方法是什么


谢谢。

您可以研究使用实体框架迁移来自动更新数据库以匹配新模型


由于EF-CF迁移是一个相当新的概念,我建议采用一个久经验证的流程,并对其进行修改,以便与我们的新工具(如EF)配合使用。我们的工作如下:

  • 使用
    DropCreateDatabaseIfModelChanges
    进行本地开发。这将允许您保持本地开发人员副本与您的模型(在代码中)同步。每次构建/运行时,都会得到一个更新的本地数据库。您还可以使用初始值设定项加载测试数据,等等

  • 使用RedGate的SQLCompare工具将本地开发与生产进行比较,并自动生成用于部署的更改脚本。(注意:您也可以从该工具自动部署)

  • 关键的好处是您不必更改本地开发过程,并且可以通过生成的脚本获得可重复和版本化的部署。您还可以将其与SQL源代码管理工具相结合,以将所有SQL对象和部署脚本(甚至数据)保留在源代码管理中


    不,我不为这些家伙工作,我只是喜欢他们的工具,以及它如何帮助我解决同样的问题。

    我希望这段代码对您有帮助


    我发现运行以下脚本

    truncate table __MigrationHistory
    
    在数据库上,当代码/数据库不同步时,将消除此问题

    也许我只是习惯了老一套,构建和修补数据库设计,相应地修改代码,或者在编码时发现我需要一个新的领域等等。。。两个地方都加上

    我承认自己是
    MVC
    的新手,但有时这些特性并没有什么帮助,因为它们隐藏了基本的工作原理。当你明白了所有的东西是如何结合在一起的,最好有发电机和工具来帮助你,但是当你开始的时候。。。我觉得不好


    我遇到过许多开发人员,他们不理解简单的概念,因为他们使用代码生成器、向导等。。当涉及到实际编程或维护遗留系统时,它们会有点丢失。

    发生这种情况时,我通常会运行迁移以指向一个新数据库,一旦创建了这个数据库,然后将新数据库的结构与现有数据库的结构进行比较,如果需要,请手动进行更改(否则,它可能会指示导致错误的原因-意外的架构更改或索引等)然后删除原始数据库上的uu MigrationHistory表中的条目,并从新数据库中复制这些条目,以便u MigrationHistory变得正确,代码优先现在将正确同步。

    我通过添加

    Database.SetInitializer<MyContext>(null); to Application_Start() inside Global.asax.cs
    
    Database.SetInitializer(null);到Global.asax.cs中的应用程序_Start()
    
    你尝试过异常消息的建议吗?考虑使用代码第一次迁移来更新数据库()。我不明白,你已经有了。现有数据库,您先使用代码!?假设您先使用代码,然后使用这种方法创建数据库,然后更改实体模型并相应地更新数据库。对您的场景的描述是a)错误的或b)有点奇怪。@YoupTube这比您想象的“反向工程”更常见和现有数据库的代码优先。它比使用数据库第一模型设计器灵活得多。@jrummel Ok。我对这种方法没有任何经验,但听起来很奇怪。这是我为同一个问题所做的,它工作得非常完美。虽然链接可能会回答这个问题,但如果你能在这里的答案中添加更多细节,那就更好了。这样做可以确保即使链接处于非活动状态,您的答案仍然有效。我进行了“脏”保存,导致EF添加此表。删除它修复了我的问题。谢谢