EntityFramework Core не может отследить сущность, потому что она уже занята - PullRequest
0 голосов
/ 16 апреля 2020

Я посмотрел на некоторые ответы на вопросы, похожие на эти, но, похоже, они не применяются.

Я пытаюсь проанализировать данные из внешнего источника и сохранить их в свои собственные данные хранить. Полученные данные имеют формат json и иногда имеют идентичные записи для определенного объекта

Пример json:

{
   "Functions:" [
    {
      "FunctionName" : "FuncName1",
      "Arguments": [
        {
          "Name": "name1",
          "Type": "type1"
        }]
    },
    {
      "FunctionName": "FuncName2",
      "Arguments": [
        {
          "Name": "name2",
          "Type": "type2",
          "Nilable": false
        }]
    },
    {
      "FunctionName": "FuncName3"
      "Arguments": [
        {
          "Name": "name1",
          "Type": "type1",
          "Nilable": false
        }]
    }]
}

В этом примере вы видите, что он возвращает определения для функций и аргументы, которые принимают функции. Вы должны заметить, что FuncName1 и FuncName3 имеют одинаковую подпись аргумента, и поэтому я хочу, чтобы они были одной и той же записью в таблице аргументов, а не новыми.

Я десериализовал весь родительский объект в соответствующие классы (в данном случае это RootObject , Функция и Аргумент классы

Вспомогательные объекты этих классов имеют больше свойств, таких как Идентификаторы, идентификаторы внешнего ключа и свойства nav для сохранения в БД. Также, в случае класса Argument, у меня есть «HasAlternatKey», назначенный для Name и Type (так как их комбинация должна быть уникальной)

Десериализация идет хорошо, но когда я добавляю сущность в RobObject DbContext и пытаюсь сохранить, я получаю ошибку

Экземпляр типа сущности 'Аргумент' не может быть отслежен, потому что другой экземпляр с значение ключа '{Name: name1, Type: type1} "уже отслеживается. При присоединении существующих объектов убедитесь, что Прилагается только один экземпляр сущности с данным значением ключа.

Как мне избежать этого?

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