Игнорировать вставку дубликата ключа через конфигурацию - PullRequest
0 голосов
/ 08 января 2019

У меня есть система, которая много раз в день вызывает 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...