Рекомендуется ли использовать Self Tracking Entities со службами WCF? - PullRequest
3 голосов
/ 10 июля 2011

Я хочу знать, рекомендуется ли использовать объекты Self Tacking (в Entity Framework) со службами WCF?Если да, то можете ли вы привести меня к учебнику, который может помочь вам сделать это?

На самом деле, я собираюсь разработать приложение WPF с использованием Prism с MEF и MVVM.Я решил использовать Entity Framework.Я хочу предложения и советы относительно этого подхода.

Любая помощь будет оценена.

Ответы [ 2 ]

7 голосов
/ 11 июля 2011

Я хочу знать, рекомендуется ли использовать службы самообучения (в Entity Framework) со службами WCF?

Это зависит от того, кого вы спрашиваете.Если вы спросите MS, они скажут вам «Да», потому что им просто нечего предложить.STE были ответом на это очень старое предложение MS Connect .Проблема в том, что EF сама имеет ужасно плохую поддержку для объединения изменений между двумя графами сущностей (вы должны сделать это полностью самостоятельно), и разработчики, работающие на платформе MS (иногда включая меня), имеют общие черты поведения:

  • Им лень разрабатывать собственное решение проблемы, и они ожидают некоторой магии непосредственно в API, предоставляемых MS.
  • Большую часть времени они не обучены / опытны / компетентны в технологии, которую ониприходится использовать, потому что им приходится слишком часто переходить на новый.
  • Единственные API, которые они знают, являются частью .NET Framework.Они не ищут других вариантов и не сравнивают функции.

Первые два пункта являются результатом стратегии MS, где RAD становится синонимом для дизайнера (или недавно также шаблоны T4).

Я разделяю @Richard мнение о STE.Я бы добавил еще один недостаток STE - они перемещают большие наборы данных между участниками.Если вы решите получить граф сущностей с сервера, измените единственную сущность на графе и отошлите данные обратно, они снова передадут весь граф.Передача только измененных объектов приводит к борьбе с основной логикой STE.Я также боюсь, что они отслеживают изменения полностью на уровне объекта, а не на уровне свойств.В случае модификации объектов с большими двоичными или строковыми данными это может привести к передаче слишком большого количества ненужных данных между службой и базой данных и между службой и клиентом.

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

4 голосов
/ 10 июля 2011

Я бы вообще избегал самостоятельного отслеживания сущностей - я написал об этом в блоге здесь .

Создайте свои собственные DTO и используйте их для управления передачей данных, а затем дважды измените ваши объекты POCO в сервисе и используйте их с Entity Framework для сохранения.

Если вы хотите самостоятельное отслеживание, тогда есть более чистый подход здесь

...