簡體   English   中英

實體框架,外鍵和實體鍵

[英]Entity Framework, Foreign Keys and EntityKeys

我遇到了Entity Framework和ForeignKeys的問題。 我有一個表“BC_Message_Assets”,它有3個FK(MessageId,AssetId和StatusId)。 我像這樣創建我的“MessageAsset”

MessageAsset messageAsset = new MessageAsset();

messageAsset.MessageStatusReference.EntityKey = new EntityKey("MyEntities.MessageStatusSet", "Id", 1);

messageAsset.AssetReference.EntityKey = new EntityKey("MyEntities.AssetSet", "Id", 1);

messageAsset.MessageReference.EntityKey = new EntityKey("MyEntities.MessageSet", "Id", messageId);

context.AddToMessageAssetSet(messageAsset);
context.SaveChanges();

但我得到以下例外:

INSERT語句與FOREIGN KEY約束“FK_BC_Message_Assets_BC_Assets”沖突。 沖突發生在數據庫“Test”,表“dbo.BC_Assets”,列“Id”中。 該語句已終止。

當我查看查詢時,我注意到AssetId的參數值為“0”,盡管我向EntityKey提供了“1”。 這是生成的查詢:

exec sp_executesql N'insert dbo.[BC_Message_Assets]([MessageId], [AssetId], [CompletionTime], [StatusId]) values (@0, @1, null, @2) ',N'@0 int,@1 int,@2 int',@0=47,@1=0,@2=1

我無法解釋會發生什么。 我在EntityKey中硬編碼“1”,我在查詢中收到“0”?

我的單元測試遇到了問題。

但我找到了問題的原因。 問題是我的BC_Message_Assets表上的PK基於2 FK(MessageId和AssetId)。 使用簡單的標識符(int + identity),它可以正常工作......奇怪!

如你所說,你編程1,1,1但得到了47,0,1

這是未預料到的2個值。

可能發生的一件事是,有一些其他代碼正在生成此行。 保存時,首先保存帶有錯誤的行,這會拋出異常,並且您永遠不會看到您創建的行。

嘗試僅使用問題中的代碼編寫單元測試。

暫無
暫無

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

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