Entity Framework 初始脚手架后的核心数据库首次更新?

Entity Framework Core Database-First Update after initial Scaffold?

我正在研究 Entity Framework Core,我一直致力于实现数据库优先应用程序。初始的 Scaffold-DbContext 命令工作得很好,并且正确地创建了我的所有实体,如果没有按照我的意愿组织的话。这是一个 SQL 服务器数据库,它使用模式来分解责任区域,我真的不在乎 Scaffold 只是将它们全部放入一个文件夹中这一事实。

除此之外,我一直无法确定是否有办法在发生数据库更新后重新运行 脚手架来更新类。我能找到的最接近的是使用 -force 参数重新 运行 Scaffold-DbContext 命令。但是,这也会覆盖我添加到 Context.cs 文件中的任何自定义代码,例如将连接字符串指向配置值而不是硬编码。

我已经查看了其他几个与 this one 类似的问题,但它只讨论了初始脚手架,没有进一步更新。

有没有办法不用手动编写任何未来的更改来执行此操作?如果没有它,它似乎使数据库优先的方法对于 EF Core 毫无价值。

就像你自己说的...数据库优先方法的主要问题:你永远不应该手动更改模型并开始重命名等。除非你 100% 确定你的数据库不会再改变。如果您不是 100% 确定,只需使用自动生成的模型进行编码。

Re-Scaffolding 将覆盖直接在模型中所做的任何更改 class,擦除您更改或添加的所有内容。

但您可以在不会被自动映射覆盖的一侧创建部分 classes :

public partial class TableName
{
    public string Name_of_a_property
    {get; set;}
}

这是向您的实体添加代码同时确保它不会被自动映射触及的好方法。只需确保局部视图与自动生成的 class 同名,一切都应该没问题。

可重新运行的脚手架可用于真正的 DB First 方法,如

然而,脚手架的使用频率更高 一次 用于将模型初始导入您的代码,然后继续使用代码优先方法。 的过程 使用逆向工程基于现有数据库创建 Entity Framework 模型 https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db

中描述