Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate как получить объект по имени? / 8 сообщений из 8, страница 1 из 1
16.02.2012, 17:30
    #37665764
OracleLover
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
Здраствуйте,

знакомлюсь вот с данной ORM, не могу никак просто получить объект из базы например по имени.

По ID это делается через Get<Entity>(id)

По имени я делаю через CreateCriteria
Код: c#
1.
session.CreateCriteria(typeof(TUser)).List<TUser>().FirstOrDefault(u => u.Name == model.UserName);



Что как-то не очень мне нравится. В сети везде уже примеры достаточно сложных запросов через Restrictions like\or\Gt и т.д с сортировкой и без. А как просто добавить критерий найти объект по значению - т.е просто "="?
...
Рейтинг: 0 / 0
16.02.2012, 17:47
    #37665807
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
OracleLover
Код: c#
1.
session.CreateCriteria(typeof(TUser)).List<TUser>().FirstOrDefault(u => u.Name == model.UserName);


Офигеть. Аналогичные грабли в вашем исполнении , только для EF. Позвольте угадаю, это запрос еще и выполняется долго, да?

Используйте QueryOver Api:
Код: c#
1.
session.QueryOver<TUser>().FirstOrDefault(u => u.Name == model.UserName)
...
Рейтинг: 0 / 0
16.02.2012, 17:53
    #37665822
OracleLover
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
SolYUtor,

Что-то ваш код невалиден, как впрочем и комментарии относительно EF - там вообще-то другая проблема была. Будьте внимательнее.
...
Рейтинг: 0 / 0
16.02.2012, 18:03
    #37665848
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
OracleLover,

1. Код писал в браузере. Правильный вариант выглядит так:
Код: c#
1.
session.QueryOver<User>().Where(u => u.Name == model.UserName).SingleOrDefault();



2. Тему с EF вы слили, не представив доказательств. Что сейчас, что тогда вы тащите всю таблицу на клиента, чтобы взять одну запись. Это впечатляет!
...
Рейтинг: 0 / 0
16.02.2012, 18:06
    #37665855
OracleLover
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
SolYUtorOracleLover,

1. Код писал в браузере. Правильный вариант выглядит так:
Код: c#
1.
session.QueryOver<User>().Where(u => u.Name == model.UserName).SingleOrDefault();



2. Тему с EF вы слили, не представив доказательств. Что сейчас, что тогда вы тащите всю таблицу на клиента, чтобы взять одну запись. Это впечатляет!

За код спасибо.
Та тема не закрыта - заходите, продолжайте, выслушаю ваши доводы как делать правильно.
...
Рейтинг: 0 / 0
16.02.2012, 18:27
    #37665905
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
OracleLover,
Знакомство с орм,
1 Подключаем лог, и смотрим какие движения генерит орм.
2 Смотрим лог на все наши действия.
3 Анализируем лог.
зы а в общем то вам уже ответили..
...
Рейтинг: 0 / 0
17.02.2012, 09:56
    #37666597
SolYUtor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
OracleLover,

Доводы растут корнями из Fallacies of Distributed Computing . Собственно, из них вытекает два вывода:
1. Надо сокращать количество межпроцессных вызовов (в нашем случае обращений к БД).
2. Надо сокращать объём передаваемых по сети данных.

Идеальный вариант вытащить всё необходимое за один запрос. Но только необходимое. А вы тащите на клиент всю таблицу, и берёте из нее одну запись. Кроме проблем передачи по сети еще рискуете огрести от проблем конкурентного доступа.
...
Рейтинг: 0 / 0
22.03.2012, 20:43
    #37718770
besserebrenik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
NHibernate как получить объект по имени?
Oracle Lover, скачайте NHibernate Profiller (триал 30 дней). Вы действительно тащите всю таблицу кодом из первого сообщения.
Если у вас "не работает" QueryOver<T>, то возможно вам стоит попробовать Query<T> или Linq<T>
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / NHibernate как получить объект по имени? / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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