我在實體框架中刪除了一個問題。簡而言之,EF明確地試圖從數據庫中刪除一個實體,即使我已經明確地配置了EF來使用數據庫中的級聯刪除。使用實體框架級聯刪除 - 由EF刪除的相關實體
我的設計:
我有三個實體類型,MainEntity
,EntityTypeA
和EntityTypeB
。在刪除EntityTypeA
和EntityTypeB
時,EF已配置爲使用級聯刪除。換句話說,如果我刪除了一個MainEntity
的實例,我希望所有相關的EntityTypeA
和EntityTypeB
實例也被刪除。我從不刪除EntityTypeA
或EntityTypeB
而不刪除其父母。
我的問題是,EF明確地發出DELETE
聲明EntityTypeA
,這導致我的應用程序崩潰。
這是我的模型是什麼樣子:
的關係具有以下非默認配置:
MainEntity -> EntityTypeA OnDelete: Cascade
MainEntity -> EntityTypeB OnDelete: Cascade
的關係EntityTypeA -> EntityTypeB
有OnDelete: None
數據庫內容
INSERT INTO MainEntities (Name) values ('Test')
insert into EntityTypeA (MainEntityID) VALUES (1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
insert into EntityTypeB (MainEntityID, EntityTypeAId) VALUES (1, 1)
我的代碼:
class Program
{
static void Main(string[] args)
{
var context = new Model1Container();
var mainEntity = context.MainEntities.Include("EntityTypeA").SingleOrDefault();
context.DeleteObject(mainEntity);
context.SaveChanges();
}
}
當我打電話的SaveChanges,實體框架會發生什麼
在數據庫中執行以下操作:
exec sp_executesql N'delete [dbo].[EntityTypeA]
where ([Id] = @0)',N'@0 int',@0=1
這將導致外鍵衝突,因爲在EntityTypeB的表引用EntityTypeA實例項目。
問題
爲什麼實體框架的問題一個明確的刪除EntityTypeA的情況下,即使我已經配置實體框架使用級聯刪除?如果我刪除包含(「EntityTypeA」),它會再次開始工作。
圖像(模型的)是不可用的 – flipchart 2014-02-25 06:27:08