假設我有一個帶有表A和表B的數據庫.B對於表A有一個外鍵,它不允許有空值。當我嘗試刪除A的實體時,我希望刪除表B中的所有引用。我嘗試用下面的代碼來做到這一點:DELETE語句在Database First中發生衝突
using (var ctx = new MyDatabaseContext(ConnectionString))
{
var a= new A() { IdA= idA};
ctx.A.Attach(a);
ctx.A.Remove(a);
ctx.SaveChanges();
}
這將導致以下錯誤消息:
附加信息:DELETE語句衝突與基準約束「FK_B_A」。數據庫「MyDatabase」中出現衝突,表「dbo.B」,列'IdA'。
該聲明已終止。
我已經嘗試了很多,從使用數據庫中的觸發器來定義ON DELETE CASCADE,但實體框架確實失敗。我究竟做錯了什麼?
觸發:
ALTER TRIGGER [dbo].[trg_DelA]
ON [dbo].[A]
FOR DELETE AS
BEGIN
DELETE FROM B WHERE B.IdA = IdA;
END
順便說一句:這僅僅是一個例子。實際的數據庫較大,並且還包含多對多關係的中間表。
BR 托馬斯
你能提供可重現的例子嗎?表A上的級聯刪除和刪除觸發器都可以工作,這並不重要 - 刪除可以通過EF或手動調用。你在數據庫方面究竟做了什麼? –
我將觸發器代碼添加到我的帖子 –