簡體   English   中英

如何通過數據庫優先方法更新 asp.net 中的模型,同時保持以前的一些方法有效

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

我在Patients表中有以下列:

Patients 表的屏幕截圖

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

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

患者截圖Model

我在上下文 class 中有一些方法可以使我的連接字符串動態化。 實際上,我曾經從令牌中獲取數據,並且在一些邏輯連接字符串從客戶端更改為客戶端之后。

現在問題就在這里,當我在 patients 表中進行更改(例如,我將 CNIC 列從CNIC5更改為CNIC )並使用-Force關鍵字運行以下命令時,它會刪除先前Tasks3Context class ( DbContext ) 中的所有數據。

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

告訴我一些更新模型並僅在特定 model 和列中進行更改的方法。

提前致謝!

我嘗試了數據庫更新程序,當我第二次使用-Force時,出現了與你類似的問題。 具體原因如下:

EF Core 生成的代碼就是您的代碼。 隨意更改它。 只有當您再次對相同的 model 進行逆向工程時,它才會重新生成。 腳手架代碼表示一個 model 可用於訪問數據庫,但肯定不是唯一可使用的 model。

自定義實體類型類和 DbContext class 以滿足您的需求。 例如,您可以選擇重命名類型和屬性,引入 inheritance 層次結構,或者將一個表拆分為多個實體。 您還可以從 model 中刪除非唯一索引、未使用的序列和導航屬性、可選標量屬性和約束名稱。

您還可以使用單獨文件中的另一個部分 class 添加其他構造函數、方法、屬性等。 即使您打算再次對 model 進行逆向工程,此方法也適用。

對數據庫進行更改后,您可能需要更新 EF Core model 以反映這些更改。 如果數據庫更改很簡單,最簡單的方法可能是手動對 EF Core model 進行更改。例如,重命名表或列、刪除列或更新列的類型都是在代碼中進行的微不足道的更改。

然而,更重要的更改並不那么容易手動進行。 一種常見的工作流程是再次使用 -Force (PMC) 或 --force (CLI) 從數據庫中對 model 進行逆向工程,以用更新的 model 覆蓋現有的 model。

另一個通常要求的功能是能夠從數據庫更新 model,同時保留重命名、類型層次結構等自定義設置。使用 issue this來跟蹤此功能的進度。

警告

如果您再次從數據庫中對 model 進行反向工程,您對文件所做的任何更改都將丟失。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM