2016-11-11 76 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