2008-12-04 5 views
14

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

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) или в грядущих событиях повторная версия?

ответ

9

Как и 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 (я думаю, не уверен в конкретной ревизии).

+0

Спасибо, у меня не было синтаксиса с верхней части головы, +1 – 2008-12-04 21:54:04

+0

Я мог заметить, что «like» и «equals» не будут давать одинаковых результатов. Недавно я попробовал (не очень сложно) найти способ сделать «как» в NHibnate.Linq. Я сдался и вместо этого использовал ICriteria. – 2008-12-06 15:27:07

1

Посмотрите на this question here. У кого-то было такое же беспокойство, и я могу собраться, NHibernate.Linq хорошо жив.