У меня есть система, которая много раз в день вызывает API и возвращает массив JSON. Объекты в массиве JSON состоят из трех уровней: обертка, детали и элементы. Например:
[
{
"Key": "value",
"Details": [
{
"Key": "Value",
"Item": {
"Id": 1,
"Title": "abc"
}
}
]
}
]
Моя модель базы данных также принимает эту структуру, что означает, что у меня есть основная таблица, таблица сведений и таблица элементов. В частности, таблица сведений имеет два отношения: одно относится к основной таблице, а другое - к таблице позиций.
Мой клиентский контекст был разработан в общем виде, что означает, что он не знает, что именно перехватывает, десериализует и сохраняет.
ISerializer serializer;
DbContext db;
String url;
public ClientContext(ISerializer serializer, DbContext db, String url){
this.serializer = serializer;
this.db = db;
this.url = url;
}
public async Task RequestAsync() {
...
return response;
}
public async Task SaveAsync(){
using(db){
db.add(serializer.deserialize(await RequestAsync());
await db.SaveChangesAsync();
}
}
Метод deserialize
возвращает объект, и у него нет определенного возвращаемого типа. Предполагая приведенный мной пример JSON, если свойство Id
объекта Items
не существует в базе данных, EF продолжает его добавление, но если оно существует, оно выдает исключение дублирующегося ключа.
Я не могу сделать какой-либо запрос для отслеживания дубликатов на этом уровне, и я хочу настроить Entity Framework (а не в SQL Server) на игнорирование дубликатов.
Поддерживается ли это EF Core?