C# EF代码首先使用另一个数据库上的现有数据库

C# EF代码首先使用另一个数据库上的现有数据库,c#,entity-framework-6,entity-framework-migrations,C#,Entity Framework 6,Entity Framework Migrations,这个标题有点让人困惑,但我试图说明问题不是为现有数据库启动代码优先模型和迁移,而是在这之后 我需要激活自动迁移,因为我们切换到系统的代码优先模型。下面是我们所做的: 我为现有数据库创建了一个空的InitialCreate 我做了一些其他的脚本,因为有一些更改,这些工作正常,脚本是在数据库上创建和运行的 当我想使用这些脚本并迁移另一个尚未以这种方式初始化的数据库时,就会出现问题。我不知道该怎么办 当我尝试运行更新数据库时,出现以下错误: Unable to update database to m

这个标题有点让人困惑,但我试图说明问题不是为现有数据库启动代码优先模型和迁移,而是在这之后

我需要激活自动迁移,因为我们切换到系统的代码优先模型。下面是我们所做的:

  • 我为现有数据库创建了一个空的InitialCreate
  • 我做了一些其他的脚本,因为有一些更改,这些工作正常,脚本是在数据库上创建和运行的
  • 当我想使用这些脚本并迁移另一个尚未以这种方式初始化的数据库时,就会出现问题。我不知道该怎么办

    当我尝试运行更新数据库时,出现以下错误:

    Unable to update database to match the current model because there are pending changes and automatic migration is disabled. Either write the pending model changes to a code-based migration or enable automatic migration. Set DbMigrationsConfiguration.AutomaticMigrationsEnabled to true to enable automatic migration.
    You can use the Add-Migration command to write the pending model changes to a code-based migration.
    

    如果我执行添加迁移,它会再次创建一个迁移,其中包含所有内容、所有创建表,这就像它忽略了我当前的脚本、存在初始值create empty和其他脚本一样。

    好,您有两个数据库——比方说DEV和PROD。它们都处于相同的状态,并且在启用迁移之前具有相同的模式。这就是要做的:

    1-将迁移添加到开发环境中,并将数据库初始值设定项设置为。另一个选择是

    2-有几种方法可以使其他数据库保持同步:

    A) 通过更改连接字符串来并行维护迁移。因此,指向PROD,运行
    updatedatabase
    ,创建u MigrationHistory表,并应用初始的空白基线。我不建议PROD数据库使用此选项(请参见下文)

    B) 与脚本同步。许多组织不希望EF应用更改,而是要求DBA应用脚本。对于此选项,您可能希望将数据库初始值设定项设置为NULL。在这种情况下,您可以执行
    更新数据库-脚本
    ,以生成更改。这将在初始基线之后的迁移中完成,因为它们已经同步。有关此技术的更多信息,请参阅

    C) 使用数据库项目或diff工具保持同步

    现在,当您在DEV中更改模型时:

    add-migration Changes1
    update-database
    
    对于选项A,更改连接字符串并重复。对于选项B,使用
    updatedatabase-Script
    。对于选项C,请使用工具重新同步


    注意:“我需要激活自动迁移…”-自动迁移是一个完全不同的问题,可能会使过程复杂化。请参阅。

    您所使用的数据库可能缺少\u EFMIgrations表?是的,确实如此。这就是问题所在。如何创建它们?手动?我以为更新数据库就可以了?我将如何在生产中做到这一点?这将取决于之前应用的迁移以及您尝试应用的迁移。我只是猜测,给您带来麻烦的数据库似乎丢失了针对另一个数据库运行的所有或部分迁移。数据库1是我配置的数据库。首先是代码迁移,它是一个现有数据库。所以它也没有迁移表。数据库2是另一个数据库,它也准备好首先在其中初始化代码(就像生产数据库),它也没有_迁移表,我不知道如何初始化它,更新数据库不起作用,也没有添加-migration@JSteward我不确定我是否清楚我的问题,我有一个dabatase,它首先没有代码,然后添加了带有空首字母的代码。现在,我想先用代码转换另一个数据库,我只是不能用我有的脚本。谢谢你的回答,自动迁移不是我的意思,我是说代码优先。我将对您提出的选项进行一些测试。我是负责制作的人,所以我可以选择如何制作。你有什么建议?意见不一。我们有一个带有DBA的完整变更管理系统,所以我们必须使用脚本。这很痛苦,但他们处理所有的备份和恢复。我知道Azure部署也有运行迁移的选项。我只是想说明一下,我的配置中有一个错误,导致迁移在项目中找不到迁移文件,这已得到纠正,所以现在我正在尝试实现一个解决方案,该解决方案将适用于所有数据库,但您的答案有效,因此我将其标记为良好!谢谢
    add-migration Changes1
    update-database