2013-03-11 3 views
2

У меня вопрос с использованием Entity Framework в WCF. Я использую .NET 4.5 с EF DbContext.Шаги по использованию Entity Framework в WCF

Вот что я знаю, чтобы использовать EF в WCF. Может быть, они недостаточны или некоторые из них не требуются.

  1. Создайте модель EF ADO.NET.
  2. Разделите классы POCO на отдельный проект (ProjectName: Entities) с помощью генератора шаблонов DbContext.
  3. Направьте шаблон TT проекта POCO в файл edmx в проекте данных (ProjectName: Data). «.. \ Data \ MyEdmx.edmx»
  4. Добавьте [DataContract (IsReference (True))] и [DataMemeber] атрибуты в .TT-файл проекта POCO, чтобы классы и свойства имели атрибуты сериализации. Добавьте ссылку Runtime.Serialization в проект и добавьте пространство имен в файл .TT. Это позволяет не потерять объявление атрибута при воссоздании классов при сохранении файла .TT или добавлении новых объектов.
  5. Добавить имя_проекта: привязка объектов к проекту данных.
  6. Отключите ProxyCreation и LazyLoading в файле Context.tt в проекте данных.
  7. Добавить (ProjectName: Entities) и (ProjectName: Data) в ваш проект службы wcf.
  8. Скопируйте строку подключения EntityFramework в проект WCF.
  9. Все ваши методы выбора в службе должны использовать .Include, если вы хотите, чтобы объекты навигации были заполнены. Это дает лучший контроль, когда вы хотите загрузить или или когда хотите показывать данные ограничения. Кроме того, вы не получаете ребенка/связанного автоматически из-за отключения lazyloading.
  10. Вставить или обновить или удалить, службе необходимо создать контекст и вручную установить состояние объекта для изменения или добавления? В противном случае изменения не будут сохранены. Используйте DbContext.Attach прикрепить и установить состояние лица надлежащим образом добавлять, изменять и т.д.

Проблема у меня было, я не мог найти хороший пример шагов, чтобы выполнить, чтобы использовать EF с WCF. Я мог видеть только кусочки. Может быть, я поздний участник Всемирного WCF, поэтому не смог найти.

Не уверен, могу ли я использовать прокси WCF. Я еще не понял полностью преимущества прокси.

Я также прочитал рекомендации по использованию DTO в качестве слоя между EF и сервисом. Это требует, чтобы картограф был на месте. Я не знаю, нужно ли мне это сразу. Но идея ясно, что она помогает скрыть любые ненужные столбцы базы данных, отображаемые в бизнес-объекте. Например, аудиторские столбцы, такие как созданные, обновленные и т. Д., Мы не показываем в клиенте.

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

Любые рекомендации приветствуются.

Дополнительное обновление

Я нашел это в MSDN http://msdn.microsoft.com/en-us/library/ee705457(v=vs.100).aspx. Некоторые из ссылок указывали на предварительную документацию. Но это дает мне несколько идей в использовании EF и WCF.

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

Update 2 * Другой Отлично Ссылка на N-Tier *

http://msdn.microsoft.com/en-us/magazine/dd882522.aspx

Я рад, что время я трачу на самом деле воспитывать меня!

+0

@Aron: Почему? Он прямо пишет, что «сделал ** не ** решил использовать DataServices». Я снова добавил тег WCF. – Slauma

+0

Мой плохой. Проблема в том, что WCF, являющийся технологией SOAP, является неправильной «формой» для CRUD. – Aron

ответ

0

Я работал над использованием EF с WCF после многого чтения здесь и на других форумах.

Я следовал за ступенями вперед. Я смог увидеть преимущество использования DTO. Это действительно позволяет вам скрыть поля, которые вам не нужно подвергать клиенту или другим службам. Но я сдерживаю введение DTO из-за временных ограничений.

Я использовал context.Attach, context.Add и context.Entry.

Я также сделал небольшой прототип для использования службы данных WCF. Это было очень быстрое развитие. Я сдерживаю использование служб данных WCF на данный момент из-за ограниченности времени при изучении его функций.

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