1

我在表中有以下列Patients

患者表的屏幕截图

我使用以下命令创建了模型。

Scaffold-DbContext "Server=.;Database=Tasks3;Trusted_Connection=True;" 
         Microsoft.EntityFrameworkCore.SqlServer 
         -OutputDir Models\MainModel

患者模型截图

我在上下文类中有一些方法可以使我的连接字符串动态化。实际上,我曾经从令牌中获取数据,并且在从客户端到客户端进行了一些逻辑连接字符串更改之后。

现在问题出在这里,当我对患者表进行更改(例如,我将 CNIC 列从 更改CNIC5CNIC)并使用关键字运行以下命令时-Force,它会删除上一个Tasks3Context类 ( DbContext) 中的所有数据。

Scaffold-DbContext "Server=.;Database=Tasks3;Trusted_Connection=True;" 
         Microsoft.EntityFrameworkCore.SqlServer 
         -OutputDir Models\MainModel -t <Patient> -f

告诉我一些更新模型并仅在特定模型和列中进行更改的方法。

提前致谢!

4

1 回答 1

0

我尝试了数据库更新程序,当我第二次使用-Force时,出现了和你类似的问题。具体原因如下:

EF Core 生成的代码就是你的代码。随意改变它。只有当您再次对相同的模型进行逆向工程时,它才会重新生成。脚手架代码代表一种可用于访问数据库的模型,但它肯定不是唯一可以使用的模型。

自定义实体类型类和 DbContext 类以满足您的需求。例如,您可以选择重命名类型和属性、引入继承层次结构或将表拆分为多个实体。您还可以从模型中删除非唯一索引、未使用的序列和导航属性、可选的标量属性和约束名称。

您还可以使用单独文件中的另一个分部类添加其他构造函数、方法、属性等。即使您打算再次对模型进行逆向工程,这种方法也有效。

对数据库进行更改后,您可能需要更新 EF Core 模型以反映这些更改。如果数据库更改很简单,那么手动更改 EF Core 模型可能是最简单的。例如,重命名表或列、删除列或更新列的类型是在代码中进行的微不足道的更改。

然而,更重要的更改并不容易手动进行。一种常见的工作流程是再次使用 -Force (PMC) 或 --force (CLI) 对数据库中的模型进行逆向工程,以用更新的模型覆盖现有模型。

另一个通常要求的功能是能够从数据库更新模型,同时保留重命名、类型层次结构等自定义。使用 issue this来跟踪此功能的进度。

警告

如果您再次从数据库对模型进行逆向工程,您对文件所做的任何更改都将丢失。

于 2021-10-05T08:09:35.247 回答