Вы задаете очень хороший вопрос, на который, к сожалению, нет очень четкого ответа. Даже если вам удастся получить ленивую загрузку для работы над WCF (что мы смогли сделать), у вас все равно будут проблемы с использованием прокси-перехватчика. Поверьте мне, вам нужны объекты POCO на уровне клиента!
То, что вам действительно нужно учитывать ... то, что было задумано как отраслевой стандартный подход к этой проблеме из исследования, которое я видел, называется постоянство против использования или постоянное невежество . Другими словами, ваша объектная модель и сопоставления представляют ваш домен персистентности, но он не соответствует вашим идеальным сценариям использования. Вы не хотите передавать всю базу данных клиенту только для того, чтобы отобразить правильную пару свойств ??
Вроде бы такая простая проблема, но решение либо очень простое, либо очень сложное. С одной стороны, вы можете спроектировать свои объекты в соответствии со сценариями использования, но тогда вы в конечном итоге столкнетесь с распространением вашего предметного домена, что затруднит его поддержку. С другой стороны, вы все еще хотите, чтобы отношения богатой объектной модели использовались для написания детальной бизнес-логики.
Чтобы упростить эту проблему, давайте рассмотрим два основных пробела, которые мы должны заполнить ... между базой данных и уровнем базы данных / сервиса и разрывом между сервисом и клиентом. NHibernate прекрасно дополняет первый, предоставляя ORM для загрузки данных в ваши объекты. Он выполняет достойную работу, но для достижения высокой производительности его необходимо настроить с помощью пользовательских стратегий загрузки. Я отвлекся ...
Второй разрыв между сервером и клиентом - это то, где все становится рискованным. Чтобы упростить, представьте, если вы не отправляли какие-либо сопоставленные объекты по проводам клиенту? Попробуйте создать механизм, который обменивает бизнес-объекты на объекты DTO, а также объекты DTO на бизнес-объекты. Таким образом, ваш клиент имеет дело только с DTO (конечно, POCO), и ваша бизнес-логика может поддерживать его богатую структуру. Это позволяет использовать не только механизм отложенной загрузки NHibernate, но и другие преимущества сеанса, такие как кэш-память первого уровня.
По соображениям краткости и интеллектуальной собственности я не буду вдаваться в конструкцию указанного механизма, но, надеюсь, этой информации достаточно, чтобы указать вам верное направление. Если вы вообще не заботитесь о производительности или задержке ... просто отключите ленивую загрузку и решите проблемы с сериализацией.