我想知道首先使用EF Core数据库时是否存在处理迁移的标准方法。
每次更改数据库时,都在CLI中运行此命令:
dotnet ef dbcontext scaffold "Data Source=(local);Initial Catalog=myCatalog;Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f
它的问题会覆盖我在其他实体和dbcontext中所做的每个更改,例如,对于每个实体,我都有一个Id
接口,当我搭建脚手架时,我以后需要再次将其添加到该实体中,是否可以将项目与数据库或仅特定实体同步?
另一个问题是,我最近不得不将实体的默认DeleteBehavior
从DeleteBehavior.ClientSetNull
更改为DeleteBehavior.Cascade
,因此现在每次使用脚手架方法时,我都需要手动更改100+ OnModelCreating
方法中的实体。
答案 0 :(得分:2)
.net Core中没有确实具有数据库优先功能。因此,这意味着存在scaffold命令以使您在拥有现有数据库的代码优先项目中启动并运行。
这对您来说意味着您必须决定要在哪里进行更改:
a)数据库,或
b)数据访问项目
这些选项中的任何一个都有效,但是您必须选择一个并坚持使用。
如果要在数据库中进行更改,则必须更改所有表并向其中添加ID字段,然后再次运行Scaffold命令以更新模型。
如果要在DA项目中对实体进行更改,则每次更改一堆内容时都必须添加EF Core Migration。
在这两种情况下,您都希望通过一堆SQL脚本或通过使应用程序在启动时执行数据库迁移来将数据库更新作为部署的一部分包括在内。
但是您不应该做的就是尝试在两个地方都进行更改。这就是您破坏部署的方式。
答案 1 :(得分:0)
是的,您可以通过指定架构和表来限制对哪些表进行反向工程。
--schema
选项可用于包含架构中的每个表,而--table
可用于包含特定表。
请尝试如下所示,仅更新Foo
表。 Click here for more detail.
dotnet ef dbcontext scaffold "Data Source=(local);Initial Catalog=myCatalog;Trusted_Connection=true;" Microsoft.EntityFrameworkCore.SqlServer -o Models -f --table Foo