2015-06-25 43 views
1

我有一個通用的存儲庫,它是我的項目中所有存儲庫的基類。該存儲庫對主鍵具有通用支持,因此它不一定是int具有通用Id的通用存儲庫 - 如何檢索int

我最初的實現是這樣的,通過ID檢索對象:

return Context.Set<TDomainObject>().Where(x => x.Id.Equals(id)).SingleOrDefaultAsync(); 

哪裏Id是類型TPrimaryKey。當我嘗試使用此邏輯用於int,得到了一個NotSupportedException與消息

無法創建類型的恆定值「System.Object的」。在此上下文中僅支持基本類型或枚舉類型。

所以我想我會很聰明,特殊情況下TPrimaryKeyint並做了評價,像這樣:

if (typeof(TPrimaryKey) == typeof(int)) 
{ 
    int iId = (int)(object)id; 
    return Context.Set<TDomainObject>().Where(x => ((int)(object)x.Id) == iId).SingleOrDefaultAsync(); 
} 

這將產生不同的異常:

無法將類型'System.Int32'強制類型爲'System.Object'。 LINQ to Entities僅支持投射EDM原始類型或枚舉類型。'

如何使我的通用存儲庫能夠使用整數工作?

+0

使用'返回Context.Set ()。找到(ID)' – dotctor

回答

2

可以使用Find方法

return Context.Set<TDomainObject>().Find(id); 
+1

傳說,謝謝! – Sam