我有一個主鍵作為物體框架中的外鍵。
public class RailcarTrip
{
[Key, ForeignKey("WaybillRailcar")]
public int WaybillRailcarId { get; set; }
public WaybillRailcar WaybillRailcar { get; set; }
// Etc.
}
這似乎作業正常,并生成下表。
CREATE TABLE [dbo].[RailcarTrips](
[WaybillRailcarId] [int] NOT NULL,
[StartDate] [datetime2](7) NOT NULL,
[DeliveryDate] [datetime2](7) NULL,
[ReleaseDate] [datetime2](7) NULL,
[ReturnDate] [datetime2](7) NULL,
[DeliveryEta] [datetime2](7) NULL,
[ReleaseEta] [datetime2](7) NULL,
[ReturnEta] [datetime2](7) NULL,
[ReturnCity] [nvarchar](80) NULL,
[ReturnState] [nvarchar](2) NULL,
[TripType] [int] NOT NULL,
CONSTRAINT [PK_RailcarTrips] PRIMARY KEY CLUSTERED
(
[WaybillRailcarId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[RailcarTrips] WITH CHECK ADD CONSTRAINT [FK_RailcarTrips_WaybillRailcars_WaybillRailcarId] FOREIGN KEY([WaybillRailcarId])
REFERENCES [dbo].[WaybillRailcars] ([Id])
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[RailcarTrips] CHECK CONSTRAINT [FK_RailcarTrips_WaybillRailcars_WaybillRailcarId]
GO
但是當我嘗試更改此 PK/FK 以使其參考不同的記錄時出現錯誤。
屬性“RailcarTrip.WaybillRailcarId”是鍵的一部分,因此不能修改或標記為已修改。要使用標識外鍵更改現有物體的主體,首先洗掉依賴項并呼叫“SaveChanges”,然后將依賴項與新主體關聯。
我不明白為什么這是一個問題?主鍵未設定為物體/自動設定。這段代碼應該是一個 FK 的簡單更新。我不想洗掉任何東西。誰能解釋為什么這是一個問題?
這似乎是物體框架錯誤,而不是 SQL Server 錯誤。
uj5u.com熱心網友回復:
EF 不支持修改主鍵。因此,您需要洗掉并插入 (Remove SaveChanges Add SaveChanges) RailCarTrip 以將其移動到不同的 WaybillRailcar。或者,您可以直接在 TSQL 中更新 PK/FK。
uj5u.com熱心網友回復:
如果我正確理解您,那就是您想更改物體 ( RailcarTrip)的主鍵的值,而不是您已經回答了您自己的問題 - EF 通知您,主鍵不是可修改的值,這是正確的SQL 資料庫。這個鍵是否也是外鍵都沒有關系。要修改主鍵值,必須洗掉相應的條目并使用新的鍵值重新創建它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/313331.html
標籤:C# sql sql-server 实体框架 实体框架核心
下一篇:EF核心遷移
