2015-10-30 1 views
0

. Моя веб-служба .net считывает сущность из БД и отправляет ее в клиентское приложение.Как обновить весь объект без указания каждого из его членов?

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

безошибочный, но трудоемкий способ сделать это идет что-то вроде:

public void Update(MyEntity updatedEntity) 
{ 
    using (var context = new MyDataContext()) 
    { 
     var existingEntity = context .MyEntities.Single(e => e.Id == updatedEntity.Id); 
     existingEntity.FirstName = updatedEntity.Name; 
     existingEntity.MiddleName = updatedEntity.MiddleName; 
     existingEntity.LastName = updatedEntity.LastName; 
     // Rinse, repeat for all members of MyEntity... 
     context.SubmitChanges(); 
    } 
} 

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

Как я могу принять входящий updatedEntity и представить его для LINQ to SQL целиком для обновления?

Я пробовал достичь этого с помощью метода Attach() и вошел в мир боли.

Действительно ли это Attach() правильный путь? Может ли кто-нибудь указать на рабочий пример того, как это сделать?

+3

'Attach()' является одним из способов сделать это. Но я обычно создаю Mapper для этих ситуаций. [Automapper] (http://automapper.org/) делают самые простые случаи из коробки. –

+1

Если у вас есть проблемы с 'Attach', каковы они? –

+0

Моя текущая проблема с 'Attach()' заключается в том, что если клиент устанавливает свойство rowversion объекта null, то context.SubmitChanges() выдает исключение, говорящее, что «строка не найдена или не изменена». – urig

ответ

1

Attach действительно является одним из способов сделать это.

Это говорит ...

безошибочный, но трудоемкий способ сделать это идет что-то вроде

правильный путь, если вы спросите меня.

Это, скорее всего, перерыв в случае структуры MyEntity был изменен

Я лично бы ожидать изменить мой метод Update бизнес в случае, если схема базы данных изменилась:

  • если это внутреннее изменение, которое не меняет бизнес, то просто нет причин изменять код, который вызывает ваш бизнес-метод , Пусть ваш бизнес-метод будет отвечать за внутренние вещи
  • , если это некоторые изменения, требующие изменения ваших потребителей, , то так должно быть, в любом случае потребовалось обновить вызывающий код (по крайней мере, для заполнения, например, новые свойства, добавленные к объекту)

в принципе, мой opinon по этому вопросу, что вы не должны пытаться передать объекты в свой бизнес-слой. Я объяснил why I think that in a previous answer.

Смежные вопросы