Как добавить два объекта в базу данных, используя один почтовый запрос? - PullRequest
0 голосов
/ 14 марта 2020

Я все еще новичок в ASP. NET MVC. Я пытаюсь добавить два объекта в две разные таблицы с помощью одного JSON запроса POST. Вот более подробное объяснение:

У меня есть эта сущность CAR:


        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int CarId { get; set; }

        [Required]
        public double Price { get; set; }

        [Required]
        public DateTime Expiry { get; set; }

        [Required]
        public ICollection<Owner> Owners{ get; set; } = new List<Owner>();

    }

Я сделал DTO для своего класса CAR, который поможет мне создавать автомобили в обычном режиме. Это он называется CarForCreationDTO:


        [Required(ErrorMessage = "Price is a required field.")]
        public double Price{ get; set; }

        [Required(ErrorMessage ="Expiry is a required field.")]
        public DateTime Expiry { get; set; }

        [Required(ErrorMessage ="Owners is a required field.")]
        public ICollection<OwnerDTO> Owners { get; set; } = new List<OwnerDTO>();

Вот OwnerDTO:

        public string Name { get; set; }
        public DateTime DateOfBirth { get; set; }
        public int CarId { get; set; }

Теперь, когда я отправляю запрос на добавление автомобиля, мне нужно предоставить цену, срок годности и список владельцев. Итак, обычно мой JSON запрос должен выглядеть следующим образом:

{
        "Price": "2020-03-28T00:00:00",
        "Expiry":  "2020-05-28T00:00:00",
        "Owners": [
            {
                 "Name":"Some Name",
                "DateOfBirth":"2001-03-28T00:00:00"
            }
        ]
}

В моем CarController.cs я сделал это, чтобы иметь возможность добавить в базу данных как объект Owner, так и объект Car:


        [HttpPost]
        public IActionResult CreateCar([FromBody] CarForCreationDTO car)
        {
            //Some validation ...

            var finalCar = _mapper.Map<Entities.Car>(car);

            foreach(var o in finalCar.Owners)
            {
                var finalOwner = _mapper.Map<Entities.Owner>(o);
                o.CarId= finalCar.CarId;
                _repository.AddOwner(finalOwner);
                _repository.Save();
            }


            _repository.AddCar(finalCar);

            _repository.Save();

            var createdCar = _mapper.Map<Entities.Car>(finalCar);

            return CreatedAtRoute("GetCar", new { id = createdCar.CarId},
                createdCar);


Я, к сожалению, получаю 500 плохих запросов, и я знаю, что это из списка "Владельцы", но я не знаю, почему это происходит. Кто-нибудь знает, как я могу это исправить, потому что я не нахожу никаких решений для моей проблемы. Я что-то не так делаю?

Большое спасибо, Джейн

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