2013-05-09 34 views
0

我有以下型號:可選可選的依賴關係EF codefirst

User 
id 
Document Doc1 
Document Doc2 


Document 
Id 
Data 
Name 

這是在實體框架是這樣建模:

modelBuilder.Entity<Document>() 
         .HasOptional(e => e.User) 
         .WithOptionalPrincipal(e => e.Doc1); 

modelBuilder.Entity<Document>() 
         .HasOptional(e => e.User) 
         .WithOptionalPrincipal(e => e.Doc2); 

的想法是,用戶不需要有這些2文件。 然而,當我試圖刪除文件與下面的代碼:

using (var ctx = new DealersContext("Db")) 
    { 
     var doc = ctx.Documents.FirstOrDefault(d => d.Id == docId); 
     if (doc != null) 
     { 
     ctx.Documents.Remove(doc); 
     ctx.SaveChanges(); 
     } 

    } 

我得到以下錯誤: DELETE語句衝突與基準約束「FK_dbo.DealersUsers_dbo.Documents_IdDocument_Id」。衝突發生在數據庫「DealersDb」,表「dbo.DealersUsers」,列'IdDocument_Id'。這怎麼解決?

回答

2

該文件仍然有一個經銷商(或一個經銷商仍然有這個文件) 導致數據庫需要設置'IdDocument_Id爲空時從數據庫中刪除文件。

在這種情況下,「IdDocument_Id」不能爲空。這是造成這個錯誤。您還需要從數據庫中刪除這個關係,或使經銷商>文件關係可空

+0

你是對的,完全忘了這一點 – Elena 2013-05-09 09:50:25