Остановить ленивую загрузку или пропуск, загружающий свойство в NHibernate? Прокси не может быть сериализирован через WCF

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

Цель

  • Для чтения родительского объекта я хочу выборочно в другом пути выполнения, решить, когда я хотел бы загрузить дочерний объект. Поскольку я не хочу читать больше, чем, в чем я нуждался.
  • Они частично загруженный объект должны смочь к отправленному через WCF. Когда я подразумеваю, что не загружаю его, никакая сторона не получит доступ к такому свойству.

Проблема

  • Когда такой частично загруженный объект отправляется через WCF как те, свойство отмечено как [DataContract], это не может быть сериализировано, поскольку свойство является ленивым прокси загрузки вместо реального известного типа.

Что я хочу заархивировать, или решение, о котором я могу думать

  • lazy=false или lazy=true не работает. Прежний нетерпеливо выберет все отношения, последний создаст прокси. Но я ничего не хочу вместо этого - a null было бы лучшим.
  • Мне не нужна ленивая загрузка. Я надеюсь получить a null для тех ссылок, которые я не хочу выбирать. Пустой указатель, но не только прокси. Это будет делать WCF счастливый, и ненужный меньше времени, чтобы создать прокси ленивой загрузки.
    Как у меня могла быть пустая фабрика прокси?
    - ИЛИ -
  • Или делая WCF, игнорирующий их свойство, это - прокси вместо реального. Я попробовал решение IDataContractSurrogate, но только породите, передается GetObjectToSerialize, Я никогда не наблюдаю прошедшего прокси GetObjectToSerialize, отъезд никакого шанса не проксировать его.

Править

После чтения комментариев, более перемещающихся в Интернете...

Мне кажется, что DTO сместил бы большую часть вычисления к стороне сервера. Но для проекта я продолжаю работать, 50% времени, клиент "более умен", чем сервер и сервер больше похожи на хранилище данных с проверкой и проверкой. Хотя я соглашаюсь, что сервер не является точно немым - я должен решить, когда уже выбрать дополнительные ссылки, и DTO сделает это очень явным.

Возможно, я должен просто взять боль. Я не знал http://automapper.codeplex.com/ прежде, это заставляет меня немного больше брать боль.

С другой стороны, я нашел http://trentacular.com/2009/08/how-to-use-nhibernate-lazy-initializing-proxies-with-web-services-or-wcf/, который, кажется, работает с IDataContractSurrogate.GetObjectToSerialize.

9
задан HelloSam 7 March 2010 в 18:34
поделиться