Пожалуйста, посмотрите мой оригинальный вопрос здесь - ядро Ontity Framework - эффективный способ обновления сущности, в котором есть дети, основанные на представлении JSON, проходящую Ontity, проходящую через Web API < /p>
Этот вопрос, которые я строю API с использованием Core Core, Entity Framework и Postgresql. Я пытаюсь внести объект через API, преобразовать его в тип клиента объекта, а затем использовать его для обновления существующего клиента объекта, поэтому в основном принимайте все измененные свойства, которые изменились между исходным и обновлением, и генерируют оператор обновления. />system.invalidoperationException: Собственность «CustomerInternalid» на тип объекта «Клиент» является частью ключа и поэтому не может быть изменена или помечена в виде изменения. Чтобы изменить принципал существующей сущности с идентифицирующим внешним ключом, сначала удалите зависимый и вызовете «savechanges», а затем связывайте зависимость с новым принципом. /> Очевидно, я не хочу менять основной ключ, это, вероятно, единственное, что я никогда не хочу обновлять. Это все другие свойства, которые могут быть изменены входящими данными. ///
/// Update customer record - still working on this
///
///
public static void UpdateCustomerRecord(CustomerPayload customerPayload)
{
try
{
var updateCustomer = customerPayload.Convert(customerPayload);
Console.WriteLine($"Update customer created from payload");
using (var loyalty = new loyaltyContext())
{
Console.WriteLine($"Using context to get db customer by mca id {updateCustomer.McaId}");
var customer = loyalty.Customer
.Include(c => c.ContactInformation)
.Include(c => c.Address)
.Include(c => c.MarketingPreferences)
.Include(c => c.ContentTypePreferences)
.Include(c => c.ExternalCards)
.Where(c => c.McaId == updateCustomer.McaId).First();
var cu = (from c in loyalty.Customer
where c.McaId == updateCustomer.McaId
select c).ToList();
Console.WriteLine($"Customer guid from linq query {cu.First().CustomerInternalId}");
Console.WriteLine(
$"db customer Id {customer.CustomerInternalId} incoming customer Id {updateCustomer.CustomerInternalId}");
loyalty.Entry(customer).CurrentValues.SetValues(updateCustomer);
loyalty.Entry(customer).State = EntityState.Modified;
Console.WriteLine($"customer last name: {customer.LastName}");
loyalty.SaveChanges();
//TODO expand code to cover scenarios such as an additional address on an udpate
}
}
catch (ArgumentNullException e)
{
Console.WriteLine(e);
throw new CustomerNotFoundException();
}
catch (Exception ex)
{
Console.WriteLine($"{ex}");
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/625 ... properties
Организация объекта с использованием CurrentValues.SetValues для обновления свойств объекта от других сущностей, сняты ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Сохранение других сущностей внутри preUpdate прослушивателя сущностей Doctrine
Anonymous » » в форуме Php - 0 Ответы
- 40 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Подключение к устройству симулятора Bacnet, но сняты с помощью свойств чтения
Anonymous » » в форуме JAVA - 0 Ответы
- 20 Просмотры
-
Последнее сообщение Anonymous
-