У меня вопрос с использованием Entity Framework в WCF. Я использую .NET 4.5 с EF DbContext.Шаги по использованию Entity Framework в WCF
Вот что я знаю, чтобы использовать EF в WCF. Может быть, они недостаточны или некоторые из них не требуются.
- Создайте модель EF ADO.NET.
- Разделите классы POCO на отдельный проект (ProjectName: Entities) с помощью генератора шаблонов DbContext.
- Направьте шаблон TT проекта POCO в файл edmx в проекте данных (ProjectName: Data). «.. \ Data \ MyEdmx.edmx»
- Добавьте [DataContract (IsReference (True))] и [DataMemeber] атрибуты в .TT-файл проекта POCO, чтобы классы и свойства имели атрибуты сериализации. Добавьте ссылку Runtime.Serialization в проект и добавьте пространство имен в файл .TT. Это позволяет не потерять объявление атрибута при воссоздании классов при сохранении файла .TT или добавлении новых объектов.
- Добавить имя_проекта: привязка объектов к проекту данных.
- Отключите ProxyCreation и LazyLoading в файле Context.tt в проекте данных.
- Добавить (ProjectName: Entities) и (ProjectName: Data) в ваш проект службы wcf.
- Скопируйте строку подключения EntityFramework в проект WCF.
- Все ваши методы выбора в службе должны использовать .Include, если вы хотите, чтобы объекты навигации были заполнены. Это дает лучший контроль, когда вы хотите загрузить или или когда хотите показывать данные ограничения. Кроме того, вы не получаете ребенка/связанного автоматически из-за отключения lazyloading.
- Вставить или обновить или удалить, службе необходимо создать контекст и вручную установить состояние объекта для изменения или добавления? В противном случае изменения не будут сохранены. Используйте 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
Я рад, что время я трачу на самом деле воспитывать меня!
@Aron: Почему? Он прямо пишет, что «сделал ** не ** решил использовать DataServices». Я снова добавил тег WCF. – Slauma
Мой плохой. Проблема в том, что WCF, являющийся технологией SOAP, является неправильной «формой» для CRUD. – Aron