#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();
}