【问题标题】:Is code first migration automatically run on the server?代码优先迁移会自动在服务器上运行吗?
【发布时间】:2016-11-02 20:23:50
【问题描述】:

我非常熟悉使用数据库优先方法的实体框架以及如何使用它部署解决方案。

基本上,在我使用数据库优先方法的解决方案中,我有一个 Web 客户端项目,它使用使用数据库优先方法编码的数据访问库项目。

所以,首先,我编写一些 SQL Server 脚本来添加新表(或进行架构更改)。

接下来,进入数据访问库项目,使用EF edmx设计器从现有数据库更新.net,编译这个数据访问层,客户端web项目中自动更新DDL引用。

当我将解决方案部署到生产服务器时:

  1. 首先,我需要在生产 SQL 服务器上运行 t-SQL 脚本
  2. 接下来,我在 Web 服务器上部署 2 个更新的 DDL(一个用于 Web,1 个用于数据访问层)。

现在,我有一个新应用程序,其中包括一个 Web 项目和一个使用 EF Code First 方法的数据访问层项目。 我是 EF 代码优先方法的新手。我知道任何时候当我更改数据库架构时,例如添加一个新表,我需要在 Visual Studio 的包管理控制台中运行代码先迁移,以让我的后端数据库实例更改/更新。

我的问题:

当我将应用程序部署到生产环境时,我应该遵循哪些步骤?

如何更新使用 EF Code First 方法创建的生产 SQL 服务器?

这是一个自动过程还是我必须像我在包管理控制台下的 Visual Studio 中那样手动运行迁移?

谢谢。

【问题讨论】:

    标签: c# .net entity-framework entity-framework-6


    【解决方案1】:

    如果您使用的是 Azure,那么您可以将其配置为自动流程,如下所示。

    否则你必须像这样手动操作:

    您必须创建一个数据库脚本,然后才能在生产数据库上运行它。

    PM> 更新数据库-脚本

    您可以参考此文档:Getting a SQL Script

    我通常使用的另一个选项:

    当我需要对生产数据库运行迁移时,我会更改我的 conn 字符串以反映生产数据库,然后运行:

    PM> 更新数据库

    【讨论】:

    • 不知道 Azure 选项;这很酷。不过还有其他自动方式。
    • 是的,如果您使用 Azure,您可以轻松完成:) @BradleyDotNET
    • 嗨 Sampath。非常感谢您的回答。看来,当我将应用程序部署到生产服务器时,我必须在我的 VS 中运行迁移代码,并将数据库连接字符串更改为生产。
    • 您使用的是 Azure 还是哪个主机?
    • 我也设置了另一个选项。请也看看 :)
    【解决方案2】:

    迁移有多种选择。

    1. 您可以使用 Update-Database -Script 生成脚本(如 @Sampath 注释)
    2. 您可以运行 Update-Database -ConnectionString="YourDbString" 它会为您针对生产数据库执行此操作
    3. 您可以使用迁移initializer,在应用启动时它将使用应用程序连接字符串来运行迁移。通过在初始化例程中添加与此类似的行来做到这一点:

      Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
      

    Context 是您的 DbContext 类型,Configuration 是您进行第一次迁移时生成的配置类。

    有关详细信息,请参阅此 MSDN 文章:https://msdn.microsoft.com/en-us/data/jj591621.aspx

    【讨论】:

    • 第三个选项的问题是,我们是否需要每次都更改conn?我的意思是 devprod
    • @Sampath 是和否,您应该已经更改连接字符串,以便生产应用程序与生产数据库通信,这样初始化程序就可以工作了。
    • 第四 => 你可以提供一个 dacpac :D DBA 这样的解决方案
    • @CodeNotFound 我不确定,但我想我很高兴我不知道你在说什么。
    • @BradleyDotNET 当多个开发人员生成脚本时,您提供的所有 3 个选项都无法维护 => 许多难以修复的冲突。顺便说一句,Dacpac 更易于维护,更容易解决冲突
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 1970-01-01
    • 2016-05-26
    相关资源
    最近更新 更多