2010-09-13 35 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(); 
    } 
}