实体框架6模型优先 - 基于本地更改更新生产数据库

时间:2014-08-19 22:39:29

标签: entity-framework azure-sql-database entity-framework-6 ef-database-first ef-model-first

我是EF的新手并继承了一个显然使用数据库优先开发的项目。

生产环境使用SQL Azure,我基本上试图找出更新其架构的标准方法。

首先,我尝试在尝试此处描述的过程之前启用EF项目的迁移: http://www.dotnet-tricks.com/Tutorial/entityframework/R54K181213-Understanding-Entity-Framework-Code-First-Migrations.html ...但我发现只适用于代码优先开发。

现在我打算做的是对我在本地开发环境中运行的数据库进行更改,然后使用我的本地数据库更新我的EF项目中的模型。

从那里开始,我想将更改部署到SQL Azure环境中,同时保留数据库中的所有现有记录,但最好的方法还不清楚。

EF工具中是否有任何内容可以生成不丢弃表的更新脚本?我是否需要手动编写更新脚本?人们通常使用SQL Server工具来进行更新吗?

不幸的是,我最初的谷歌搜索没有找到问题的答案,尽管这似乎是一个非常普遍的问题。

1 个答案:

答案 0 :(得分:2)

EF迁移用于代码优先开发,而不是数据库优先。但是如果你从数据库进行逆向工程,你仍然可以使用它。为了能够这样做,您需要安装The Entity Framework 6 Tools,但这需要一些努力,比如

  • 逆向工程源数据库
  • 使用EF迁移生成新数据库Enable-MigrationsAdd-Migration InitialCreateUpdate-Database ConnectionStringName NewDatabase
  • 目标数据库(已修改的数据库)进行逆向工程
  • 生成升级脚本Enable-MigrationsAdd-Migration UpgradeToVersionXUpdate-Database ConnectionStringName NewDatabase -Script

EF数据库逆向工程也存在与唯一约束相关的问题。


但是,由于您首先使用数据库直接从数据库修改架构,因此更简单的方法是使用SQL Server Data Tools的架构编译器。

  • 创建 SQL Server数据库项目的新项目(来自其他语言 - > SQL Server)
  • 右键单击项目,选择架构比较
  • 选择源数据库目标数据库
  • 运行生成脚本

Generate Script

生成的脚本与手动编写脚本一样接近,可能更少人为错误,如拼写错误。