Entity Framework 4 - Обновление одного свойства объекта в дилемме N-уровня - PullRequest
1 голос
/ 05 апреля 2011

У нас есть n-уровневое приложение, которое включает в себя БД, поверх нее EF4, затем службы WCF и, наконец, клиент silverlight 4.

Мы думаем, каков наилучший способ обновить одно свойство сущности. У нас есть клиентский объект, который имеет около 15 объектов. Теперь в клиенте пользователь изменил свойство «Имя клиента» и хочет сохранить это изменение в БД. Итак, на ум приходят два метода:

1) Просто отправьте всю сущность Customer через службу WCF и обновите базу данных. Это очень просто, потому что в методе Update на сервере все, что нам нужно сделать, это присоединить входящий объект к контексту, изменить его objectState на измененный и нажать SaveChanges ().

2) Поскольку все наши объекты имеют один ключ int, мы можем предоставить метод в службе WCF, который выглядит примерно так:

public void UpdtaeEntityProperty(Type i_EntityType, int i_EntityId, string i_PropertyName, string i_NewValue); 

В первом методе мы отправляем по сети много информации, которая не нужна. Второй метод отправляет только то, что нужно, плюс он подходит всем энтузиастам. Другое преимущество состоит в том, что когда пользователь обновляет несколько полей в пользовательском интерфейсе, мы имеем больше возможностей для создания исключений, когда он вводит значения.

Во всех примерах EF4 \ videos \ books процесс обновления значения свойства всегда включает в себя отправку полного объекта. Вы никогда не увидите подход, который обновляет одно значение. Это как если бы мы пропустили какое-то связывание данных в клиенте: компонентную сеть, которая будет связывать определенное текстовое поле с БД, даже если это через службу WCF.

1) Разве такое решение находится в разработке для следующих реалий EF4 / WCF?

2) Является ли наше решение метода UpdateEntityProperty хорошей практикой?

1 Ответ

0 голосов
/ 05 апреля 2011

Вы никогда не увидите подход, который обновляет единственное значение. Это как если бы мы отсутствует какой-то связыватель данных в клиент: компонент, который будет привязать определенное текстовое поле к БД, даже если это за службу WCF.

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

Если ваши сущности большие и производительность важна для вас, во что бы то ни стало, просто отправьте ID и обновленное значение на сервер - это решение будет работать лучше, но оно не очень общее и зависит от свойств вашего типа сущности. - но это может быть хорошо для вашего проекта.

...