Как получить объект от базы данных с NHibernate?

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

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

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

    return result;
}

проблема, result тип HNibernate. ICriteria.

Как я могу заставить это возвращать a Site объект?

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

1
задан DaveDev 9 July 2010 в 15:31
поделиться

4 ответа

Вам нужно сначала выполнить запрос (вызвав List() на критерии) перед вызовом 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();
}
0
ответ дан 2 September 2019 в 23:09
поделиться

Я считаю, что .UniqueResult () - это то, что вам нужно ...

из документации:

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

1
ответ дан 2 September 2019 в 23:09
поделиться

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

1
ответ дан 2 September 2019 в 23:09
поделиться

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

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

Если вы предпочитаете API критериев Linq, вы должны использовать result. SetMaxРезультаты(1). UniqueResult() для создания чего-то, равного IQueryable.FirstOrDefault

0
ответ дан 2 September 2019 в 23:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: