Как получить объект из базы данных с помощью NHibernate? - PullRequest
1 голос
/ 09 июля 2010

Я пытаюсь получить объект обратно из запроса NHibernate.

Мой метод следующий:

public Site GetSiteByHost(string host)
{
    var result = _session.CreateCriteria<Site>()
        .Add(SqlExpression.Like<Site>(g => g.URLName, host));

    return result;
}

проблема в том, что result является типом HNibernate.ICriteria.

Как я могу получить это, чтобы возвратить Site объект?

Если бы я делал это с LINQ to SQL, это было бы что-то вроде .FirstOrDefault(), но это не доступнос NHibernate ... или это?!?!

Ответы [ 4 ]

1 голос
/ 09 июля 2010

Я думаю, вы можете поставить .List<Site>() в конце, а затем сделать .FirstOrDefault() на нем.

1 голос
/ 09 июля 2010

Я верю .UniqueResult() - это то, что вы ищете

из документов:

Удобный метод для возврата одного экземпляр, который соответствует запросу, или пусто, если запрос не дал результатов.

0 голосов
/ 09 июля 2010

Вы можете использовать linq с NHibernate. Он находится в пространстве имен NHibernate.Linq в стволе NHiberante.

return session.Query<Site>().FirstOrDefault(site => site.UrlName.Contains(host));

Когда вы предпочитаете API критериев над Linq, вы должны использовать result.SetMaxResults(1).UniqueResult(), чтобы создать что-то равное IQueryable.FirstOrDefault

0 голосов
/ 09 июля 2010

Вам необходимо сначала выполнить запрос (вызвав List<T>() по критериям) перед вызовом FirstOrDefault Обратите внимание, что этот запрос может возвращать несколько объектов:

IEnumerable<Site> sites = _session
    .CreateCriteria<Site>()
    .Add(SqlExpression.Like<Site>(g => g.URLName, host))
    .List<Site>();

И вы можете взять первый:

Site result = sites.FirstOrDefault();

или напрямую:

public Site GetSiteByHost(string host)
{
    return _session
        .CreateCriteria<Site>()
        .Add(SqlExpression.Like<Site>(g => g.URLName, host))
        .List<Site>()
        .FirstOrDefault();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...