Вставка репозитория со свойством навигации вызывает ошибку ограничения FOREIGN KEY - PullRequest
0 голосов
/ 27 мая 2020

Я использую EF Core и sqlite. Для следующих сущностей 1: 1:

  public class Entity1:FullAuditedEntity<int>
  {
    public Entity2 Entity2 { get; set; }

    public string Name { get; set; }

  }

  public class Entity2: FullAuditedEntity<int>
  {

    public string Name { get; set; }       

    [ForeignKey("Entity1Id")]
    public Entity1 Entity1{ get; set; }
    public int Entity1Id { get; set; }
  }

и следующей вставки logi c:

    entity1.Entity2 = new Entity2();
    entity1= await entity1Repository.InsertAsync(entity1);//entity1Repository is of type IRepository<Entity1>

Код выше выдает:

Microsoft. EntityFrameworkCore.DbUpdateException: произошла ошибка при обновлении записей. Подробнее см. Внутреннее исключение. ---- Microsoft.Data.Sqlite.SqliteException: ошибка SQLite 19: «Ошибка ограничения FOREIGN KEY». at ...

Этот подход тоже не работает, выдает то же самое:

    var entity2 = new Entity2();
    entity1.Entity2 = entity2;
    entity2.Entity1 = entity1;
    entity1= await entity1Repository.InsertAsync(entity1);//entity1Repository 

Что делаю не так, чего не хватает? Как правильно создать Entity1 и Entity2 с установленным свойством Entity2? Можно ли создать репо только с Entity1?

Заранее спасибо.

Обновление : Проблема решена. В реальном коде entity2 имеет собственную ссылку на entity3, которая явно выбрасывалась. Это была причина.

Ответы [ 2 ]

1 голос
/ 30 мая 2020

Как это?

public class Entity1:FullAuditedEntity<int>
{
   public Entity2 Entity2 { get; set; } = new Entity2();

   public string Name { get; set; }    
}

var entity1 = new Entity1();
entity1 = await entity1Repository.InsertAsync(entity1);//entity1Repository

Или вы хотите клонировать? Выезд: https://entityframeworkcore.com/knowledge-base/48873716/how-to-deep-clone-copy-in-ef-core

0 голосов
/ 30 мая 2020

См. Обновление в моем сообщении - была другая сущность, которая нарушила ограничения fk. Спасибо всем за ваше время.

...