我正在使用Entity Framework Core,我一直致力于实现Database-First应用程序。最初的Scaffold-DbContext命令工作得很好,并且如果没有按照我的意愿组织,则正确地创建我的所有实体。它是一个使用模式来分解责任区域的SQL Server数据库,我并不真正关心Scaffold将它们全部放入一个文件夹这一事实。
除此之外,我无法确定在数据库更新发生后是否有办法重新运行Scaffold来更新类。我能找到的最接近的是使用-force参数重新运行Scaffold-DbContext命令。但是,这也会覆盖我添加到Context.cs文件中的任何自定义代码,例如将连接字符串指向配置值而不是硬编码。
我看了几个与this one类似的问题,但它只讨论了最初的脚手架,而不是进一步的更新。
是否有办法在未来的任何更改中手动编码?如果没有它,似乎使用EF Core使数据库优先的方法毫无价值。
答案 0 :(得分:6)
就像你自己说的那样......数据库第一种方法的主要问题是:你不应该手动更改模型并开始重命名等等。除非你100%确定你的数据库不再改变。如果您不是100%确定,只需使用已自动生成的模型进行编码。
Re-Scaffolding将覆盖模型类中直接进行的任何更改,删除所有已更改或添加的内容。
但是您可以在不会被自动映射覆盖的一侧制作部分类:
public partial class TableName
{
public string Name_of_a_property
{get; set;}
}
这是向您的实体添加代码的一个很好的小方法,同时确保自动映射不会触及它。只需确保部分视图与自动生成的类具有相同的名称,一切都应该没问题。
答案 1 :(得分:3)
可重新运行的脚手架可以用作真正的DB First方法answered by Antoine Pelletier。
但更常见的是,支架使用一次将模型初始导入代码,然后继续使用Code First方法。 过程到 使用逆向工程基于现有数据库创建实体框架模型 在https://docs.microsoft.com/en-us/ef/core/get-started/aspnetcore/existing-db
中描述