Я впервые делаю небольшое API-приложение для отдыха, и я застрял на одной конкретной вещи: обновите свой внешний ключ с помощью [HttpPost].
Что я имею в виду под обновлением?
Простой: рассмотрим следующее простое приложение: я хочу сделать клиентов и создать или назначить им тип клиента (например, «независимый» или «частный»)
Итак, у меня есть следующие классы:
public class Customer
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public CustomerType CustomerType { get; set; }
public Customer() { }
}
И
public class CustomerType
{
[Key]
public int Id { get; set; }
public string CustomerTypeName { get; set; }
public CustomerType () { }
}
Что я могу сделать в данный момент: я написал свой API, чтобы я мог одновременно создавать и нового customer, и CustomerType!
[Route("NewCustomer")]
[HttpPost]
public Customer NewCustomer(Customer customer)
{
customerContext.Add(customer);
customerContext.SaveChanges();
}
Итак, откуда-то я получаю тело JSON, которое содержит мое имя клиента и CustomerType.Оба идентификатора равны 0, поэтому структура сущностей сохраняет их в базе данных и назначает идентификатор как для моего нового клиента, так и для нового CustomerType.
Однако: позже частные клиенты становятся независимыми клиентами.Теперь это уже существует в базе данных, поэтому нет необходимости создавать CustomerType "Independant".
Единственное, что я хочу сделать, это изменить идентификатор CustomerType клиента с 1 на 2 (скажем, 1 был закрытым, а 2 - независимым).
Когда я публикую его в своем API, яотправьте следующий JSON через почтальона:
{
"Id": 1,
"Name": "Test1",
"CustomerType ": {
"Id": "2"
},
}
Когда я говорю, что saveChanges просто не работает, платформа Entity не распознает, что ей нужно только изменить CustomerTypeId с 1 на 2 (если это не так,Заказчик является независимым, а не частным).
Единственный способ, которым я могу заставить его работать в данный момент, - это сначала получить CustomerType с идентификатором 2 из базы данных и «привязать» его к моему клиенту:(не нужно смотреть на контексты и т. д., это пример кода)
[Route("NewCustomer")]
[HttpPost]
public Customer NewCustomer(Customer customer)
{
CustomerType customerType=
CustomerTypeContext.GetByID(customer.CustomerType.Id);
customer.CustomerType = customerType;
customerContext.Add(customer);
customerContext.SaveChanges();
}
Если я сделаю вышеизложенное, все будет работать отлично!Customer.CustomerType.Id изменился с 1 на 2, но зачем мне это делать?Разве я не могу сказать Entity Framework: Привет, как вы видите, Id изменился с 1 на 2, так что вы можете просто изменить ID и сохранить его?спасибо EF.
Кто-нибудь может мне помочь?Заранее спасибо!