EFCore: что делать, если ограничение fk не выполнено во время SaveChanges () из-за несуществующего объекта fk - PullRequest
0 голосов
/ 09 октября 2019

Как мне обрабатывать несуществующие отношения?

Я синхронизирую данные из API и получаю некоторые неверные данные:

  • A имеет детей B (B имеет FK для A)

  • Я получаю dto B, который имеет AId, но этот A не существует в наборе A dtos.

Итак, я создаю объекты A, а затем при создании объектов B в EFCore он использует свойство shadow, чтобы автоматически установить отношение к A из dto при использовании Entry.PropertyValues.SetValues(dto). В конце этого при вызове SaveChanges () я получаю исключение SQLite 19 Foreign Key Constraint Failed из-за несуществующего A.

Мой общий код добавления

//Setup the DBContext...

var newT = new T();
var entry = context.Add(newT);
entry.CurrentValues.SetValues(TDto); //It automatically sets the AId here while adding B entities

Я не уверен, чтомой лучший вариант здесь.

  • Я мог бы проверить, что A существует при создании B, но это только простой пример, и в моей реальной ситуации есть много таких отношений, которые бынужно проверить.

  • Я собираюсь добавить новые объекты совершенно неправильно? Было бы неплохо иметь общий метод добавления, возможно, мне нужен какой-то обратный вызов для пользовательских проверок каждого типа сущности?

Я не могу гарантировать, что данные поступают из APIбудет в безопасности.

Dtos

public class ADto
{
    public Guid Id { get; set; }
}
public class BDto
{
    public Guid Id { get; set; }
    public Guid AId { get; set; }
}

Классы сущностей

public class A
{
    public Guid Id { get; set; }
    public virtual Collection<B> children { get; set; }
}
public class B
{
    public Guid Id { get; set; }
    public Guid AId { get; set; }
    public virtual A { get; set; }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...