【问题标题】:Copy and Sync Database Changes to Entity Framework Models将数据库更改复制并同步到实体框架模型
【发布时间】:2019-02-11 22:12:27
【问题描述】:

我们首先使用实体​​框架代码,并在 C# 中使用我们的模型。 我们的一位 DBA 添加了一个额外的专栏,我们如何将他的更改迁移到我们的 Net Core 项目中?有命令行自动同步吗?

我们知道下面的命令行将获取整个数据库并放入 C#。我们只对小的修改感兴趣。

Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models

【问题讨论】:

  • 我们首先使用实体​​框架代码 - DBA 不应该首先在数据库中创建列。
  • 正确,不明白,我们正在努力适应不同的团队成员
  • 您是否尝试过将列名添加到模型并生成迁移。然后通过删除迁移的public override void Up()方法中的AddColumn()来更改迁移?
  • 您可以手动将该列添加到实体类。然后可选到 OnModelCreating() 方法

标签: database entity-framework model-view-controller asp.net-core-2.0 sql-server-2016


【解决方案1】:
  1. 向模型添加列。
  2. 生成迁移。
    将生成迁移文件20180906120000_add_dba_column.cs

  3. 在表_EFMigrationHistory中手动添加关于刚刚创建的迁移的新记录
    记录:MigrationId: 20180906120000_add_dba_column, ProductVersion: <copy from previous migration>

如果你想自动执行,意味着你想同时结合两种不同的方法。

我认为 EF 团队将“EF 代码优先”和“EF 数据库优先”方法分开是有原因的。

当您选择EF Code first 方法时,这意味着事实来源是您的应用程序代码。
如果您想坚持使用代码优先的方法,这意味着您应该训练您的 DBA 编写 EF 迁移。

【讨论】:

  • @MarkThomas - “代码优先”意味着你有一个事实来源 - “你的代码”。训练 DBA 写入 EF 迁移
【解决方案2】:

这就是你所拥有的。使用现有数据库是全有或全无的事情。您可以通过代码管理实体并将更改迁移回您的数据库,或者您从数据库中构建实体。换句话说,数据库更改意味着您需要重新构建所有内容。没有“代码迁移”之类的东西。

或者,我想您可以手动修改实体类。对于像添加新列这样的简单更改,这可能是最好的方法,只要您注意完全复制属性以匹配数据库中的列。

编辑(基于问题的 cmets)

好的,因此,如果您首先执行代码,那么任何人都不应该手动访问数据库。时期。你必须把它定为规则。如果 DBA 想要进行更改,他可以将其传达给您的团队,您可以在其中进行适当的代码更改并交回 SQL 脚本以执行迁移。这就是 DevOps 发挥作用的地方。您的 DBA 应该是您团队的一员,并且大家应该一起做出决定。如果你不能这样做,这将行不通。

【讨论】:

猜你喜欢
  • 2015-09-21
  • 2011-08-23
  • 2017-10-04
  • 2011-04-28
  • 2011-04-26
  • 2011-03-10
  • 1970-01-01
  • 2016-08-11
  • 2011-02-26
相关资源
最近更新 更多