Организация объекта с использованием CurrentValues.SetValues ​​для обновления свойств объекта от других сущностей, снятыC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Организация объекта с использованием CurrentValues.SetValues ​​для обновления свойств объекта от других сущностей, сняты

Сообщение Anonymous »

Пожалуйста, посмотрите мой оригинальный вопрос здесь - ядро ​​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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»