[英]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.