2009-03-14 4 views
4

Выполнение некоторых экспериментов вокруг WCF и Entity Framework. Несколько вопросов.Структура сущности в многоуровневой архитектуре?

Вариант 1:

Я понимаю, что рамочные сущность классов могут быть сериализованы через WCF непосредственно, с sp1 года. Как бы то ни было, я хотел бы знать, как обрабатываются сценарии, такие как загрузка с задержкой, загруженная загрузка, управление контекстом и т. Д., Если они вообще обрабатываются?

Вариант 2:

Другой альтернативой может быть использование EFPocoAdapter, чтобы иметь простую POCO оболочку поверх каркаса объекта, вместо того, чтобы разоблачать рамочные сущность классов напрямую. http://code.msdn.microsoft.com/EFPocoAdapter. Кто-нибудь использовал это? Любые мысли в этом направлении?

Другие мысли:

О услуг передачи данных ADO.NET - Как я понимаю, услуги передачи данных ADO.NET не могут быть сконфигурированы через Remoting (nettcp связывание)? Он поддерживает только HTTP-доступ. Мы все знаем, что двоичная сериализация медленнее.

Любые указатели или любые другие варианты?

ответ

4

Я сделал кое-что по этому поводу, и вот мои выводы по этому поводу.

Услуги ADO.NET Data:

Вы можете использовать услуги ADO.NET Data (вам нужно SP1), чтобы выставить свой каркас Entity по проводам, с почти нулевым кодом. Но, насколько я понимаю, единственное ограничение - транзакция по HTTP. Это означает, что с точки зрения сериализации существует небольшая над головой (все мы знаем, что двоичная сериализация выполняется быстрее), но преимущество - это скорость реализации наших сервисов.

Я получил неофициальное слово от Иоанна [http://twitter.com/John_Papa] на это - «. Определенно больше возможностей с ФОС больше работы, в большинстве случаев слишком Астория выставляет объекты легко Perf дифференциалы ничтожны в большинстве случаев.»

Преимущество - Вам вообще не нужно писать какие-либо сервисы - вы можете просто подключить логику проверки и безопасности вокруг служб служб данных и сущности, и мы закончили. Идеально, если вы потребляете услуги, ориентированные на данные, поверх http - в сценариях, например, с клиентом silverlight или с интерфейсом winform/wpf по http.

Разоблачение Entity Framework над WCF:

С SP1, есть большая поддержка для использования рамки сущности в многоуровневой архитектуре. Это включает поддержку для интенсивной загрузки и управления контекстом.Конечно, в этом случае нам нужно написать службы (и логику наших методов). Или, если у нас есть модель фреймворка сущности, полностью привязанная к db, мы могли бы сгенерировать большую часть сервисов, включая методы, которые нам нужны.

Рекомендуя вам прочитать эту http://msdn.microsoft.com/en-us/magazine/cc700340.aspx

Другой альтернативой может быть использование EFPocoAdapter, чтобы иметь простую POCO оболочку поверх каркаса объекта для DTOS, вместо того, чтобы разоблачать рамочные сущность классов напрямую. Прямо сейчас это проект компаса для следующей версии инфраструктуры Entity http://code.msdn.microsoft.com/EFPocoAdapter.

2

Это очень плохая идея, чтобы выставлять классы EF над WCF. Microsoft допустила некоторые серьезные ошибки, которые мешают этому быть полезным сценарием. Они разоблачили сущности как данные contrracts, но также и базовые классы сущности, а для обратных ссылок разоблачили две копии ссылки.

С другой стороны, похоже, что службы данных ADO.NET обладают некоторой магией, позволяющей чему-то близкому к ней работать. Прочтите статью SilverLight в журнале MSDN этого месяца для примера, с клиентской стороны, использования служб данных ADO.NET.

+0

Службы данных ADO.NET не могут работать в удаленном режиме, не так ли? Он поддерживает только HTTP-доступ. – amazedsaint

+0

Кроме того, EFPocoAdapter является адаптером поверх EF, который позволяет отправлять и возвращать объекты POCO поверх WCF. Мысли? – amazedsaint

+0

У вас есть ссылка на EFPocoAdapter? Я никогда не слышал об этом. Я читал о http://www.codeplex.com/AutoMapper, хотя это и есть ранние дни. –

0

Не поднимать старое сообщение, но ... Я нашел это объявление, имея дело с одной и той же проблемой. У нас есть службы WCF и модель домена Entity Framwork. В конце концов я закончил создание T4 на основе работы Дэнни Симмонса, которая принимает EDMX и строит классы сообщений POCO вместе с методами расширения, которые сопоставляют entity.ToMessage() и message.ToEntity (objectcontext).

Это казалось лучшим промежуточным подходом до .NET 4.0, так как для него не требуется дополнительных внешних зависимостей проекта или обручей, как и другие найденные мной методы (на основе PostSharp).

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

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