InvalidOperationException при вставке массива данных с использованием EF - PullRequest
0 голосов
/ 22 октября 2018
System.InvalidOperationException: 'The instance of entity type 'Borrower' cannot be 
tracked because another instance with the key value '{BorrowerId: -2147482647}' is
already being tracked. When attaching existing entities, ensure that only one 
entity instance with a given key value is attached.'

Приведенная выше ошибка возникает при попытке вставить массив данных на сервер SQL с помощью Entity Framework.

Ниже приведен массив JSON, который я пытаюсь вставить в базу данных,Массив содержит два элемента, и я полагаю, что ошибка вызвана структурой сущности, вставляющей два элемента массива в базу данных с одинаковым идентификатором.Если я удаляю один элемент из массива, данные вставляются как обычно.Тот факт, что один элемент вставлен правильно, также указывает на то, что проблема не в данных, которые в настоящее время хранятся в базе данных.

"borrower": [
    {
      "borrowerId": 0,
      "address": {
        "addressId": 0,
        "houseNum": "string",
        "houseName": "string",
        "streetName": "string",
        "locality": "string",
        "town": "string",
        "county": "string",
        "postcode": "NE11NE"
      },
      "title": 1,
      "firstName": "string",
      "lastName": "string",
      "dob": "2018-10-17T09:22:00.422",
      "homeNumber": "01212122222",
      "workNumber": "01212122222",
      "mobileNumber": "01212122222",
      "email": "borrower@borrower.com"
    },
    {
      "borrowerId": 0,
      "address": {
        "addressId": 0,
        "houseNum": "string",
        "houseName": "string",
        "streetName": "string",
        "locality": "string",
        "town": "string",
        "county": "string",
        "postcode": "NE11NE"
      },
      "title": 1,
      "firstName": "string",
      "lastName": "string",
      "dob": "2018-10-17T09:22:00.422",
      "homeNumber": "01212122222",
      "workNumber": "01212122222",
      "mobileNumber": "01212122222",
      "email": "borrower@borrower.com"
    }
  ]

Методы, вызываемые в этой ситуации, относительно просты и поэтому не должны бытьисточник ошибки, но я включил их ниже для ясности.

Отправить инструкцию

[HttpPost]
        public IActionResult SendInstruction([FromBody]SolicitorInstruction si)
        {
            //Validate
            ValidationController controller = new ValidationController();
            bool instructionIsValid = controller.ValidateInstruction(si);

            if (instructionIsValid)
            {
                _instructionRepo.CreateInstruction(si);
                Console.WriteLine("\nInstruction successfully inserted into database records.\n");
                return Ok("Successfully added instruction into database.");
            }

            Console.WriteLine("\nInvalid Data: Insert into database records aborted.\n");
            return BadRequest(controller.ErrorMessages);
        }

Создать инструкцию

public void CreateInstruction(SolicitorInstruction instruction)
        {
            _context.SolicitorInstructions.Add(instruction);
            _context.SaveChanges();
        }

DbContext - Используется для создания модели EF.

public class SolicitorContext : DbContext
    {

        public DbSet<AdditionalInformation> AdditionalInformations { get; set; }
        public DbSet<Address> Addresses { get; set; }
        public DbSet<Borrower> Borrowers { get; set; }
        public DbSet<BorrowerBank> BorrowerBanks { get; set; }
        public DbSet<Broker> Brokers { get; set; }
        public DbSet<CurrentLender> CurrentLender { get; set; }
        public DbSet<Occupier> Occupiers { get; set; }
        public DbSet<Property> Properties { get; set; }
        public DbSet<Solicitor> Solicitors { get; set; }
        public DbSet<SolicitorInstruction> SolicitorInstructions { get; set; }

        public SolicitorContext(DbContextOptions<SolicitorContext> options)
            : base(options)
        {

        }

Таблица заемщика

[Table("Borrower")]
    public partial class Borrower
    {
        [Key]
        public int BorrowerId { get; set; }
        [ForeignKey("AddressId")]
        public Address Address { get; set; }
        //public bool BorrowerAddressIsCorrespondenceAddress { get; set; }
        public Honorifics Title { get; set; }
        [StringLength(32)]
        public string FirstName { get; set; }
        [StringLength(32)]
        public string LastName { get; set; }
        public DateTime Dob { get; set; }
        [StringLength(32)]
        public string HomeNumber { get; set; }
        [StringLength(32)]
        public string WorkNumber { get; set; }
        [StringLength(32)]
        public string MobileNumber { get; set; }
        [StringLength(64)]
        public string Email { get; set; }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...