我有一个通用存储库,它是我项目中所有存储库的基类。存储库具有对主键的通用支持,因此它不一定是int
。
我的初始实现就是这样,通过ID检索对象:
return Context.Set<TDomainObject>().Where(x => x.Id.Equals(id)).SingleOrDefaultAsync();
Id
的类型为TPrimaryKey
。当我尝试将此逻辑用于int
时,我会收到一条带有消息的NotSupportedException
无法创建类型&#39; System.Object&#39;的常量值。在此上下文中仅支持原始类型或枚举类型。
所以我认为我是聪明的,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&#39;键入&#39; System.Object&#39;。 LINQ to Entities仅支持转换EDM原语或枚举类型。
如何使用ints使我的通用存储库工作?