2016-11-11 103 views
0

我有附加对象DbSet问题。实体框架6 - 添加家长带着孩子包含其他孩子

class Word 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID {get;set;} 
    public virtual ICollection<Translation> Translations {get;set;} 
    public virtual ICollection<Inflection> Inflections {get;set;} 
} 

class Inflection 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID {get;set;} 
    public virtual Word Word {get;set;} 
} 

class Translation 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID {get;set;} 
    public virtual Word Word {get;set;} 
    public virtual ICollection<Sentence> Sentences {get;set;} 
} 

class Sentence 
{ 
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public Guid ID {get;set;} 
    public virtual Translation Translation {get; set;} 
} 

我这样做:

DatabaseContext.UserWord.Add(entity); 
DatabaseContext.SaveChanges(); 

这里是我的人际关系的配置:

modelBuilder.Entity<Translation>() 
    .HasRequired(x => x.Word) 
    .WithMany(x => x.Translations); 

modelBuilder.Entity<Inflection>() 
    .HasRequired(x => x.Word) 
    .WithMany(x => x.Inflections); 

modelBuilder.Entity<Sentence>() 
    .HasRequired(x => x.Translation) 
    .WithMany(x => x.Sentences); 

我尝试创建Word对象:

{ 
    "Id": "GUID" 
    "Translations": [ 
     { 
      "Id": "GUID", 
      "Sentences": [ 
       { 
        "Id": "GUID", 
       } 
      ] 
     } 
    ], 
    "Inflections": [ 
     { 
      "Id": "GUID", 
     } 
    ] 
} 

但“DatabaseContext。 SaveChanges()“抛出异常:

INSERT语句与FOREIGN KEY约束条件 “FK_dbo.Sentence_dbo.Word_WordId”冲突。冲突发生于数据库 “tempDatabase”,表“dbo.Word”,列“ID”。本声明 被终止。

一切都OK了下面的Word对象:

{ 
    "Id": "GUID" 
    "Translations": [ 
     { 
      "Id": "GUID" 
     } 
    ], 
    "Inflections": [ 
     { 
      "Id": "GUID", 
     } 
    ] 
} 

我该怎么办错了吗? 你能帮我吗?

+0

有些事情不对 - 错误消息指出'“FK_dbo.Sentence_dbo.Word_WordId”'FK,但你已经证明了什么没有这种关系。 –

回答

0

它看起来像你的sentence模式发生了变化,因为它是有外键word时候应该参考translation,请尝试运行add-migration检查看到的变化和update-database(如果你使用代码优先迁移)

+0

谢谢!我有1次迁移并增加了另一次迁移。第二次迁移并未从DbMigration文件中删除“Word_WordId”。所以我删除了所有迁移文件并创建了Init迁移,现在它可以工作。 – Pyotreq