如何通过数据库优先方法更新 asp.net 中的模型,同时保持以前的一些方法有效

How to update models in asp.net through database first approach while keeping some previous methods alive

我在Patientstable中有以下列:

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

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

Screenshot of Patient Model

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

现在问题来了,当我对患者进行更改时 table(例如,我将 CNIC 列从 CNIC5 更改为 CNIC)并且 运行以下带有 -Force 关键字的命令,它会删除之前 Tasks3Context class (DbContext).

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

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

提前致谢!

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

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

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

您还可以在单​​独的文件中使用另一个部分 class 添加额外的构造函数、方法、属性等。即使您打算再次对模型进行逆向工程,此方法也适用。

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

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

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

警告

If you reverse engineer the model from the database again, any changes you've made to the files will be lost.