Как мне обрабатывать несуществующие отношения?
Я синхронизирую данные из 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; }
}