如何在使用数据库第一种方法时更新模型

wit*_*son 44 entity-framework-core asp.net-core

我首先使用EntityFramework Core数据库来创建模型,如EF Core文档中所示

但是我不知道在编辑数据库时如何更新模型.

Mik*_*ind 72

您可以通过运行-Force添加了选项的最初运行的命令来重新构建模型.这将导致指定文件夹的内容被覆盖.使用EF Core文档中的Package Manager控制台示例,修订后的命令变为:

Scaffold-DbContext "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force
Run Code Online (Sandbox Code Playgroud)

或者,如果您使用CLI命令,它将变为:

dotnet ef dbcontext scaffold "Server=(localdb)\v11.0;Database=Blogging;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f
Run Code Online (Sandbox Code Playgroud)

但是,您应该考虑使用迁移来保持模型和数据库架构彼此同步.这样,您可以对模型进行更改,然后将它们传播到数据库.


Yom*_* S. 24

附加提示

如果您要不时更新模型,这是一种简化过程的简便方法。

转到菜单工具 > 外部工具,然后添加新菜单并填写以下条目:


职称

Update DbContext
Run Code Online (Sandbox Code Playgroud)

命令

dotnet.exe
Run Code Online (Sandbox Code Playgroud)

参数

Update DbContext
Run Code Online (Sandbox Code Playgroud)

初始目录

$(ProjectDir)
Run Code Online (Sandbox Code Playgroud)

然后选择勾选“使用输出窗口”,点击“ 应用”单击“确定”

当您再次进入“ 工具”时,只需单击一个按钮,该新菜单就应该在那里并且可以重复使用了!

  • 谢谢,这非常有用。 (2认同)

小智 9

您需要进行迁移,请勿重新搭建支架,否则您将丢失对模型所做的任何工作,例如数据验证。

  • 那是不完整的。如果您只是执行迁移,您将覆盖由 DBA 完成的数据库更改,而不是首先通过代码完成的更改,并且您需要准备好简历。如果您必须使用迁移,则必须注释掉迁移将针对数据库运行的所有更改,并确保您已正确手动更新所有 POCO 类和实体以匹配数据库。按照 Yom S. 所说的去做可能是最简单的。另外,将来不要像 SOLID 的“O”中所述那样向实体 POCO 类添加代码。开放继承 封闭更新 (4认同)
  • 问题是关于数据库优先方法,那么迁移在这里不适用。迁移适用于模型优先方法。 (3认同)
  • 我认为我们根本不应该写入生成的代码。如果我们这样做的话,就会出现问题。 (2认同)