WCF + NHibernate + LazyLoading - PullRequest
       0

WCF + NHibernate + LazyLoading

1 голос
/ 08 июня 2011

У меня проблемы с передачей отложенных загруженных данных по проводам с использованием WCF и NHibernate.Всего у меня более 5 000 000 записей.

Приложение является многоуровневым, использует MVVM и работает как: WCF (привязка net.tcp) -> Уровень доступа к данным -> Бизнес-уровень ->Пользовательский интерфейс.

Нет проблем с WCF или NHibernate.Сопоставления правильные, и они точно лениво загружают данные в конце WCF.

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

Можно ли остановить это расширение?

Вот архитектура класса:

class A

{

  //properties

   IList<B> list;

}



class B

{

  //properties

   IList<C> c_list;

   IList<D> d_list;

   IList<E> e_list;

   IList<F> f_list;

   IList<G> g_list;

}



class C

{

  //properties

   IList<D> d_list;

   IList<E> e_list;

   IList<F> f_list;

   IList<G> g_list;

}


class D

{

  //properties

}

class E

{

  //properties

}



class F

{

  //properties

}



class G

{

  //properties

}

Ответы [ 2 ]

1 голос
/ 08 июня 2011

Отключите ленивую загрузку или используйте DTOs !!! Это решение. Передача записей 5М выглядит бессмысленно, и, если ваши коллекции загружены лениво, первоначальная сериализация может вызвать несколько сотен тысяч операций выбора базы данных. Также, если каждая запись имеет только 1B, вы будете передавать 5MB - я сомневаюсь, что запись имеет 1B, поэтому мы можем говорить о передаче десятков MB.

0 голосов
/ 08 июня 2011

Рекомендуемый подход - не раскрывать модель вашего домена через WCF. Вы должны отправить DTO по сети. В этом случае вы сможете контролировать ленивую загрузку на стороне сервера и правильно ее проектировать. Также я рекомендую использовать NHibernate Profiler . А 5 миллионов записей - это огромный объем данных - рассмотрите возможность реализации подкачки на стороне сервера

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...