С# Лямбда-выражения и NHibernate
Я новичок в великом мире 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();
Что-нибудь вроде thins в текущей версии (2.0.1.GA) или в будущей версии?
Ответы
Ответ 1
Как и 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 (я думаю, не уверен в конкретном редакция).
Ответ 2
Если вы еще не хотите использовать Linq для NHibernate, есть несколько альтернатив для получения запросов типа Criteria:
Ответ 3
Возможно, вы можете сделать это с помощью NHibernate.Linq. Он в удобной форме, но все же путь от завершения. В настоящее время он живет внутри nhcontrib, единственный способ получить его - вытащить его из svn здесь https://nhcontrib.svn.sourceforge.net/svnroot/nhcontrib/trunk/src/NHibernate.Linq/
Ответ 4
Посмотрите этот вопрос здесь. У кого-то было такое же беспокойство, и я могу собрать, NHibernate.Linq хорошо жив.
Ответ 5
Вы можете найти то, что ищете здесь (запись в блоге) или здесь (репозиторий google)