2013-05-09 36 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