2013-11-26 40 views
1

我是實體框架的新手。是否有可能直接從表中刪除一個實體,而不是去清除所有與其他表的多對多連接?如何刪除與其他表有多對多關係的實體?

var artist = _artistDetailsRep.SingleOrDefault(d => d.ArtistID == id); 

_artistDetailsRep.Delete(artist); 
_artistDetailsRep.SaveChanges(); 

此代碼抱怨是因爲藝術家與artistType有多對多的連接(約束)。所以有什麼作品是低於

artist.ArtistTypes.Clear(); 
_artistDetailsRep.Delete(artist); 
_artistDetailsRep.SaveChanges(); 

我需要明確清除所有的藝術家類型,然後刪除藝術家。有沒有辦法自動做到這一點?基本上它應該刪除所有的連接本身,而不是我去說並刪除這些約束?

可能你可以建議更好的方法來應對這些情況嗎?

回答

2

您可以讓SQL Server通過使用Cascading Deletes爲您做到這一點。實體框架也可以通過在Fluent API中使用WillCascaseOnDelete()方法獲得支持,請參閱this article以獲取更多信息。 This question也可能會幫助你。

請記住,級聯刪除是雖然相當危險,在你的代碼是一個錯誤可能會擦一個完整的表在數據庫中。

+0

所以,這是默認情況下不啓用? –

+0

@ J.W。不,我不希望。通常,當這未配置時,EF會拋出有關引用約束違例的異常。 –

相關問題