NHibernate QueryOver <T>с интерфейсами? - PullRequest
       10

NHibernate QueryOver <T>с интерфейсами?

2 голосов
/ 13 сентября 2010

У меня есть объект репозитория, который знает тип сопоставленного класса Hibernate. Но у него нет общего типа <T>, а ссылка на объект Type Type TheMappedType. Поэтому я не могу сделать что-то вроде: session.QueryOver<typeof(TheMappedType)>()....

Обычно, что я могу сделать с Hibernate: session.Get(typeof(TheMappedType), someId).

Итак, в чем суть: мой репозиторий является универсальным классом с универсальным типом интерфейса. Я хочу передать некоторые лямбда-функции на этот интерфейс (например, некоторые, где ограничения в методе get), и я хочу, чтобы он был переведен в фактически отображенный тип ... есть ли способ сделать это?

Спасибо Max

1 Ответ

2 голосов
/ 21 сентября 2010

Вы можете сделать свой ссылочный тип универсальным, используя TheMappedType.MakeGeneric (params), а затем использовать его в методе QueryOver.И если вы передадите какую-либо лямбда-функцию в свой репозиторий, она автоматически переведет ее в ваш общий тип.

Я сделал следующее в своем репозитории

System.Linq.Expressions.Expression<Func<Employee, bool>> expression = items => items.Name == "abc";

IList employeeList = Repository<Employee>.FindRecords(expression)

, и класс репозитория имеет следующиеМетод:

Repository<T> 
{
  IList< T > FindRecords(System.Linq.Expressions.Expression<Func<T, bool>> expression) 
  {
    return Session.QueryOver<T>().Where(expression).List();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...