Как обновить список элементов в Entity Framework? - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть список объектов.Эти объекты и некоторые их свойства отображаются в виде сетки.Пользователь может добавлять, удалять и изменять свойства любого выбранного объекта.

Подход к обновлению выполняется при событии нажатия кнопки сохранения (и не сразу с выполненными действиями).

Каков наилучший способ обновления списка, который может включать добавленные объекты, удаленные объекты и объекты с измененными свойствами в моем Web API 2 с использованием Entity Framework?

Класс клиента:

public class Customer
{
    public int CustomerId { get; set; }
    public string Name { get; set; }
    public string Phone { get; set; }
    public string Email { get; set; }
}

Класс клиентов:

Public Class Customers
{
    public List<Customer> Customers { get; set; }
}

Метод PUT для клиентов на данный момент:

ResponseType(typeof(void))]
public async Task<IHttpActionResult> PutCustomersViewModel(CustomersViewModel custViewModel)
{
   if(!ModelState.IsValid)
       return BadRequest(ModelState);

   // Not sure how to iterate thru the list and update or add accordingly


   _context.Entry(customer).State = EntityState.Modified;

   try
   {
       await _context.SaveChangesAsync();
   }
   catch(DbEntityValidationException ex)
   {
       foreach(var entityValidationErrors in ex.EntityValidationErrors)
       {
           foreach(var validationError in entityValidationErrors.ValidationErrors)
           {
               System.Diagnostics.Debug.WriteLine("Property: " + validationError.PropertyName + " Error: " + validationError.ErrorMessage);
           }
       }
   }
   catch(DbUpdateConcurrencyException)
   {
        return NotFound();

        throw;
    }

    return StatusCode(HttpStatusCode.NoContent);
}

Я могу удалить все элементы и повторно добавить их, но я думаю, что этонеправильный подход.Есть ли способ сравнить и только добавить / обновить изменение / пропущенные элементы?

Ответы [ 4 ]

0 голосов
/ 29 ноября 2018

Сделайте так, как сказал @Жуан Антуан ... кнопки для каждого действия CRUD или проверьте состояние объекта:

 switch (custViewModel.State)
 {
    case State.Added:
     break;
    case State.Unchanged:
     break;
    case State.Modified:
    break;
    case State.Deleted:
    break;
    case State.Detached:
    break;
  }

ваша сетка:

enter image description here

0 голосов
/ 29 ноября 2018

Вы можете использовать что-то вроде AutoMapper.org , взять коллекцию объектов базы данных, которую вы хотите отредактировать, объединить с automapper и затем сохранить изменения.

0 голосов
/ 29 ноября 2018

Это только моя точка зрения, если это трудно реализовать, может быть, это потому, что метод пытается сделать слишком много.

Этот подход создаст код лечения с проблемами обслуживания.

Лучше всего разделить это на 3 метода создания, обновления и удаления.

И поместить это действие непосредственно в строку вашей таблицы данных или перехватить событие при изменении сетки данных для правильного применения изменения в вашем методе сохранения в вашемвид.

0 голосов
/ 29 ноября 2018

Вы не хотите удалять и повторно добавлять объекты - это может фактически удалить то, что у вас есть в базе данных, и повторно добавить новые.

Вы можете перебирать объекты, чтобы найти их.которые находятся как в (обновление), так и в цели, но не в источнике (удаление), и в источнике, но не в цели (создание).Пока вы идете, вы можете внести изменения в контекст БД, а затем просто сохранить изменения.

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