C # лямбда-выражения и NHibernate - PullRequest
14 голосов
/ 04 декабря 2008

Я новичок в великом мире NHibernate. Я использую версию 2.0.1.GA. Вот мой вопрос. У меня есть таблица Cars со столбцом Manufacturer(nvarchar(50)) и первичным ключом ID(int). Мой класс .NET:

public class Car
{
    public virtual int ID { get; set; }
    public virtual string Manufacturer { get; set; }
}

Теперь, если я хочу получить все автомобили Mercedes, я должен напечатать это:

using (var session = OpenSession())
{
    var cars = session
        .CreateCriteria(typeof(Car))
        .Add(Restrictions.Like("Manufacturer", "Mercedes"))
        .List();
    // ...
}

Мне не нравится тот факт, что мне нужно указать имя свойства в виде строки :( Возможно ли иметь что-то более дружественное к рефакторам (это всего лишь предложение)?

var ms = session
    .CreateCriteria<Car>()
    .Add(c => c.Manufacturer, Restrictions.Like("Mercedes")
    .List();

Что-нибудь вроде тонет в текущей версии (2.0.1.GA) или в будущей версии?

Ответы [ 5 ]

9 голосов
/ 04 декабря 2008

Как сказал Google Ninja, вы можете сделать это с помощью NHibernate.Linq. Тогда запрос будет:

session.Linq<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()

Если кто-то здесь и использует NH3.0, синтаксис немного отличается (спасибо Михаэлю Мрозеку и Майку за предложение):

session.Query<Car>.Where(c => c.Manufacturer == "Mercedes").ToList()

Я использовал двоичный файл, поставляемый в комплекте с fluent-nhibernate , который работает с 2.0GA (я думаю, не уверен насчет конкретной ревизии).

6 голосов
/ 07 декабря 2008

Если вы еще не хотите использовать Linq для NHibernate, есть несколько альтернатив, чтобы строго набирать запросы Criteria:

4 голосов
/ 04 декабря 2008

Возможно, вы могли бы сделать это с помощью NHibernate.Linq. Он находится в удобной форме, но все еще не завершен. В настоящее время он живет внутри nhcontrib, единственный способ получить его - вытащить его из svn здесь https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/

1 голос
/ 28 июля 2009

Вы можете найти то, что ищете здесь (запись в блоге) или здесь (репозиторий Google)

1 голос
/ 06 декабря 2008

Посмотрите на этот вопрос здесь . У кого-то было то же беспокойство, и, насколько я знаю, NHibernate.Linq жив.

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