2016-11-11 2 views
0

У меня возникла проблема с добавлением объекта в DbSet.Entity Framework 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 заявление противоречит ограничение внешнего ключа "FK_dbo.Sentence_dbo.Word_WordId". Конфликт произошел в базе данных «tempDatabase», таблице «dbo.Word», в столбце «Id». Заявление завершено .

Все нормально для объекта ниже Слова:

{ 
    "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 миграция, и я добавил еще одну. Вторая миграция не удаляла «Word_WordId» из файла DbMigration. Поэтому я удалил все файлы миграции и создал Init mig, и теперь он работает. – Pyotreq