【问题标题】:Entity Framework DB Migration Script实体框架数据库迁移脚本
【发布时间】:2016-02-10 17:30:22
【问题描述】:

好的,这就是我的情况。我已经从数据库生成 POCO 并围绕它们进行开发。我还重命名并更改了其中一些 POCO,使其更具可读性。我现在已经对我的原始数据库方案进行了更改,并且需要将更改迁移回我的模型而不覆盖我的更改,除非方案发生了更改。有没有办法生成一个 *.sql 脚本交给 DBA?如果是这样,有没有办法比较两个数据库并生成更改脚本?即-dev db => prod db。

【问题讨论】:

  • 你是先做代码还是先做数据库? VS2013 中有一个模式比较。 techbubbles.com/sql-server/…
  • 一开始是db,现在是混合的。
  • 呸。如果它首先是数据库,则只需向下传播更改。防止覆盖的方法是使用部分类 (dzapart.blogspot.com/2011/11/…)。如果它是代码拳头,您可以为 DBA 生成脚本。
  • 如果我从现在开始只使用代码优先方法,我可以生成这个脚本吗?还是必须以这种方式开始?如果可能,您可以将其发布为答案吗?

标签: sql .net entity-framework scripting migration


【解决方案1】:

您可以先将项目切换为代码,然后通过迁移生成所需的脚本。有关从 db first 到 code first 的指南,请参阅下面的链接,但听起来您可能已经部分了解了。

1) enable-migrations 用于包含您的上下文的项目(如果您还没有的话)。

2) 创建基线迁移。 EF 将以此作为起点,因此您不会获得一堆代码来创建已经存在的对象。忽略更改标志告诉 EF 不要创建现有对象。 https://msdn.microsoft.com/en-us/data/dn579398.aspx?f=255&MSPPError=-2147217396#option1

create-migration InitialCodeFirst -IgnoreChanges

3) 现在像往常一样修改架构并创建迁移:

add-migration SomeNewThing

4) 使用 -Script 为不同的数据库(如 PROD)创建脚本。这不会更新你的数据库,它只是创建一个脚本,所以我通常会在没有 -Script 的情况下再次运行它:

update-database -Script    // creates a script (in VS), but does not apply
update-database            // updates the database your connect string points to

5) DBA 运行脚本,这会将记录添加到 __MigrationHistory 以将其标识为正在应用。

http://devgush.com/2014/02/24/migrating-a-project-from-database-first-to-code-first/

这是一个有用的部署链接:http://cpratt.co/migrating-production-database-with-entity-framework-code-first/#at_pco=smlwn-1.0&at_si=54ad5c7b61c48943&at_ab=per-12&at_pos=0&at_tot=1

【讨论】:

  • 重要信息!再次感谢您的帮助!
猜你喜欢
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
相关资源
最近更新 更多