Database 将数据库更改复制并同步到实体框架模型

Database 将数据库更改复制并同步到实体框架模型,database,entity-framework,model-view-controller,asp.net-core-2.0,sql-server-2016,Database,Entity Framework,Model View Controller,Asp.net Core 2.0,Sql Server 2016,我们首先使用的是实体框架代码,我们的模型是C#。 我们的一位DBA增加了一个专栏,我们如何将他的更改迁移到我们的NetCore项目中?是否有命令行自动同步此操作 我们知道下面的命令行将占用整个数据库并放入C#。我们只对微小的修改感兴趣 Scaffold-DbContext "Server=(localdb)\mssqllocaldb;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServe

我们首先使用的是实体框架代码,我们的模型是C#。 我们的一位DBA增加了一个专栏,我们如何将他的更改迁移到我们的NetCore项目中?是否有命令行自动同步此操作

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

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

你就这些了。使用现有数据库是一件要么全有要么全无的事情。要么通过代码管理实体并将其中的更改迁移回数据库,要么从数据库中构建实体。换句话说,数据库更改意味着您需要重新构建所有内容。没有所谓的“代码迁移”

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

编辑(基于对问题的评论)

好吧,如果你先编写代码,那么就不应该有人手动触摸数据库。时期你必须把它作为一条规则。如果DBA想要进行更改,他可以与您的团队进行沟通,您可以在团队中进行适当的代码更改,并返回SQL脚本以执行迁移。这就是DevOps发挥作用的地方。你的DBA应该是你团队的一部分,你们应该一起做决定。如果你做不到,这是行不通的

  • 将列添加到模型中
  • 生成迁移。
    将生成迁移文件
    20180906120000\u add\u dba\u column.cs

  • 在表
    \u EFMigrationHistory

    记录:
    MigrationId:20180906120000\u add\u dba\u列,产品版本:

  • 如果您想自动完成,这意味着您想在同一时间将两种不同的方法结合起来

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

    当您选择EF code first方法时,这意味着真相的来源是您的应用程序代码。

    如果您希望坚持代码优先的方法,这意味着您应该培训DBA编写EF迁移。

    我们首先使用实体框架代码-DBA不应该首先在数据库中创建列。正确,请不要理解,我们正在尝试适应不同的团队成员。您尝试将列名添加到模型并生成迁移。然后通过删除迁移的
    public override void Up()
    方法中的
    AddColumn()
    来更改迁移?我们可能会使用下面这样的技术来同步我们的项目,dba和sql reporting团队还需要从数据库项目创建报告,如果您知道的话,我在这里还问了一个问题,@MarkThomas-“代码优先”意味着你有一个真理的来源——“你的代码”。训练DBA写EF迁移