Я все еще новичок в 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 плохих запросов, и я знаю, что это из списка "Владельцы", но я не знаю, почему это происходит. Кто-нибудь знает, как я могу это исправить, потому что я не нахожу никаких решений для моей проблемы. Я что-то не так делаю?
Большое спасибо, Джейн