[英]LINQ to SQL: inserting child entity fails because ID is not included in SQL?
我正在通過分配LINQ-to-SQL實體的子代來非常簡單地插入數據庫,但是在外鍵上失敗了。
代碼是:
var imageStripFileAltText = new ImageStripFileAltText();
imageStripFileAltText.Alt = "alt text";
imageStripFile.ImageStripFileAltText = imageStripFileAltText;
db.SubmitChanges();
imageStripFile
是自定義類型ImageStripFile
,在數據庫中具有相應的表。
db
是一個DataContext。
當我在調試器中檢查imageStripFile.ImageStripFileAltText
時,我看到已為其分配了正確的外鍵ID,即imageStripFile
的主鍵。 但是,出現以下異常:
System.Data.SqlClient.SqlException:'INSERT語句與FOREIGN KEY約束“ FK_ImageStripFileAltText_ImageStripFile”沖突。 數據庫“ Cms”的表“ dbo.ImageStripFile”的列“ Id”中發生了沖突。
由於我確定具有對應ID的ImageStripFile
存在,這使我感到困惑,直到我檢查了生成的SQL:
DECLARE @p0 NVarChar(4000) = 'alt text'
INSERT INTO [dbo].[ImageStripFileAltText]([Alt])
VALUES (@p0)
生成的SQL在參數中不包含ID!
我究竟做錯了什么?
我也嘗試過直接分配外鍵ID:
var imageStripFileAltText =
new ImageStripFileAltText() { ImageStripFileId = imageStripFile.Id };
但結果是一樣的。
編輯:如果我從子表的主鍵中刪除IsIdentity
屬性(我現在認為這是正確的情況),則會得到另一個異常:
System.Data.SqlClient.SqlException:'無法將值NULL插入表'Cms.dbo.ImageStripFileAltText'的'ImageStripFileId'列中; 列不允許為空。 INSERT失敗。
請注意,這也與生成的SQL相對應。
在我的方案中,表中的PK字段未自動遞增,即IsIdentity設置為false。 嘗試在表格中檢查一下。
哇。 我正在開發數據庫上構建模型,並在生產數據庫上執行代碼,在該數據庫上ImageStripFileAltText
表的方案略有不同(可能與IsIdentity有關?),因為在編寫代碼時我仍在修改它。
長話短說:代碼很好; 不要白痴,要勤奮工作。
IsIdentity需要設置為true並自動遞增
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.