Как обновить объект с помощью Entity Framework с бизнес-уровня?

#c# #entity-framework #entity-framework-5

#c# #entity-framework #entity-framework-5

Вопрос:

Я структурировал свое веб-приложение с 3 уровнями, контроллером, бизнес-логикой и репозиторием.

На уровне BL я обновляю объект следующим кодом. Как вы можете видеть, я обновляю свойство по свойству.

Я хотел бы знать, есть ли лучший способ сделать это, удалив это ручное сопоставление.

———————- КОНТРОЛЛЕР

     public IHttpActionResult Put(int id, DeviceDTO dto)
    {
        GaDevice device = Mapper.Map<GaDevice>(dto);
        deviceBLL.Update(id, device);
        return Ok();
    }
  

———————- BL

     public void Update(int id, GaDevice entity)
    {
        bool hasValidId = GetById(id) != null ? true : false;
        if (hasValidId == true)
        {
            GaDevice device = deviceRepo.GetById(id);
            device.CanNotifyPc = entity.CanNotifyPc; // NOT SURE HERE
            device.CanNotifyPrinter = entity.CanNotifyPrinter;
            device.LocationId = entity.LocationId;
            device.Name = entity.Name;
            device.Note = entity.Note;
            device.OperativeFromTime = entity.OperativeFromTime;
            device.OperativeToTime = entity.OperativeToTime;
            deviceRepo.Update(device );
            deviceRepo.Save();
        }
  

—————- Репозиторий

     public void Update(GaDevice entity)
    {
        context.Entry(entity).State = EntityState.Modified;
    }
  

Комментарии:

1. вы пробовали device=entity???

2. в deviceRepo.Update вы можете подключить устройство перед установкой состояния. КСТАТИ, имхо, сопоставление должно быть в репозитории, а не в BL. imho всегда, использование бизнес-класса в домене и в репозитории экономит время, но увеличивает путаницу.

Ответ №1:

Как насчет сохранения изменений, внесенных в context в Update() ? В противном случае, что делает ваш код в Save() do?

 public void Update(GaDevice entity)
{
    context.Entry(entity).State = EntityState.Modified;
    context.SaveChanges();
}