簡體   English   中英

LINQ to SQL:插入子實體失敗,因為SQL中不包含ID?

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

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