2010-09-13 52 views
2

我有一个知道映射的hibernate类的类型的存储库对象。但它没有通用的<T>类型,而是对类型对象Type TheMappedType的引用。所以我不能这样做: session.QueryOver<typeof(TheMappedType)>()...NHibernate QueryOver <T>与接口?

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

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

谢谢 最大

+0

是您的仓库通用与否? Quot:“我有一个知道类型(...)的存储库对象,但它没有通用的类型(...)”和“我的存储库是通用类(...)”。现在我很困惑。 – 2011-04-11 08:00:42

+0

当你向我们展示一些代码时,它可能会是最简单的。 (请只有最重要的部分,而不是整个实施。) – 2011-04-11 08:02:02

回答

2

你可以让你referened型通用使用TheMappedType.MakeGeneric(PARAMS),然后在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(); 
    } 
}