NHibernate QueryOver <t>带接口?</t>

时间:2010-09-13 15:07:20

标签: linq nhibernate

我有一个知道映射的hibernate类的Type的存储库对象。但它没有通用的<T>类型,而是对Type对象Type TheMappedType的引用。所以我做不了类似的事情: session.QueryOver<typeof(TheMappedType)>()...

通常我可以用hibernate做的是: session.Get(typeof(TheMappedType), someId)

那么大概是什么:我的存储库是一个具有通用接口类型的泛型类。我想在这个接口上传递一些lambda函数(比如一些get方法中的限制)并且我希望它被转换为实际映射的类型......有没有办法做到这一点?

谢谢 最大

1 个答案:

答案 0 :(得分:2)

您可以使用TheMappedType.MakeGeneric(params)使您的referened类型通用,然后在QueryOver方法中使用它。如果您将任何lambda函数传递给您的存储库,那么它会自动将其转换为您的泛型类型。

我在我的存储库中执行了以下操作

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();
  }
}