Postgres 資料庫包含具有自然主鍵的產品表:
create table product
(
productcode char(10) primary key,
price numeric(12,2),
... a lot of other columns
);
和其他具有自然主鍵的類似表。
ASP.NET 5 MVC 應用程式用于使用帶有 Npgsql 資料提供程式的 EF Core 更新它。
如果產品代碼也被更改,EF Core 會拋出錯誤
屬性“Product.Productcode”是鍵的一部分,因此不能修改或標記為已修改。要使用標識外鍵更改現有物體的主體,首先洗掉依賴項并呼叫“SaveChanges”,然后將依賴項與新主體關聯。
產品代碼在其他表中用作外鍵(帶有 ON UPDATE CASCADE 子句),因此無法洗掉。
資料庫結構更改不是一個選項。
如何還允許更新主鍵列?
一些想法:
在 EF Core 中阻止此檢查,在更新之前強制將舊值設定為與新值相同。
在保存更改之前將主鍵設定為其他值。
強制 EF Core 創建更新陳述句并手動執行
使用一些 EF Core 擴展或其他框架。
更改 Npgsql EF 核心提供程式以允許此操作。
在不改變資料庫結構的情況下實作這一點的最佳方法是什么?
uj5u.com熱心網友回復:
由于您正在更改主鍵,因此實際上它不是更新,而是添加新產品。所以
從現有產品創建一個新產品,該產品將具有新的產品代碼
更新所有具有先前產品代碼的表中的所有專案,用新的外鍵替換先前的外鍵。
在此之后,您可以洗掉以前的產品。
如果您嘗試關閉驗證并更改代碼,此后您的資料庫將被破壞,您將無法再次使用它,因為您將不斷遇到集成錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/333219.html
