我有一個通用的存儲庫,它是我的項目中所有存儲庫的基類。該存儲庫對主鍵具有通用支持,因此它不一定是int
。具有通用Id的通用存儲庫 - 如何檢索int
我最初的實現是這樣的,通過ID檢索對象:
return Context.Set<TDomainObject>().Where(x => x.Id.Equals(id)).SingleOrDefaultAsync();
哪裏Id
是類型TPrimaryKey
。當我嘗試使用此邏輯用於int
,得到了一個NotSupportedException
與消息
無法創建類型的恆定值「System.Object的」。在此上下文中僅支持基本類型或枚舉類型。
所以我想我會很聰明,特殊情況下TPrimaryKey
是int
並做了評價,像這樣:
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原始類型或枚舉類型。'
如何使我的通用存儲庫能夠使用整數工作?
使用'返回Context.Set()。找到(ID)' –
dotctor