powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.Net Data Service и NHibernate, как не грузить всю коллекцию при обращении к объекту.
2 сообщений из 2, страница 1 из 1
ADO.Net Data Service и NHibernate, как не грузить всю коллекцию при обращении к объекту.
    #36376900
karoziya
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, Имеем таблицу с объектами, например Peoples, порядка 100 тыс. записей.
при создании сервиса
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
[System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults=true)] 
    public class WebDataService1 : DataService<DataSource>
    {
        public static void InitializeService(IDataServiceConfiguration config)
        {
            config.SetEntitySetAccessRule("*", EntitySetRights.All);
        }
    }
если в качестве датасурса указывать ентити модель данных то при обращении к коллекции объектов
http://localhost:1377/ WebDataService.svc/Peoples
запрос выполняется примерно 10 секунд, при обращении к конкретному значению по ИД
http://localhost:1377/ WebDataService.svc/Peoples(1)
запрос выполняется почти сразу

Если описываю датасурс на базе NHibernate

Маппинг для People
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="ServerRequests" assembly="ServerRequests" 
                   default-access="nosetter.camelcase">
  <class name="People" table="Peoples">
   
    <id name="ID" unsaved-value="0" type="System.Int32">
      <column name="Id" not-null="true" />
      <generator class="identity"/>
    </id>
    
    <property name="Name" column="Name" not-null="true" type="System.string" />
  </class>
</hibernate-mapping>

Датасурс
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public class DataSource
    {       
        static DataSource()
        {
        }        
        
        public IQueryable< People > Peoples
        {
            get
            {
                Domain.Init();
                ISession session = Domain.CurrentSession;
               
                ICriteria criteria = session.CreateCriteria(typeof(People));

                return criteria.List< People >().AsQueryable();
            }
        }
    }

То при обращении к конкретному объекту
http://localhost:1377/WebDataService.svc/Peoples(1)
запрос длиться 10 секунд, то есть я так понимаю сначала получается весь список объектов,
а потом только отфильтровывается то, что необходимо.

Собственно вопрос как ентитифреймворк понимает что не надо грузить всю коллекцию и
можно ли хибернейт заставить работать также.
...
Рейтинг: 0 / 0
ADO.Net Data Service и NHibernate, как не грузить всю коллекцию при обращении к объекту.
    #36378735
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
karoziya,
Не много не понял вопрос, ты же в гете сам написал, ташить все скопом
на клиента.
Если хочешь тащить сингл, расширь класс через session.Get
или критерионы.
или прилепи к People
бизнес объект и там примастырь вытаскивание синглов.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / ADO.Net Data Service и NHibernate, как не грузить всю коллекцию при обращении к объекту.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]