当我调用
DbSet.FirstOrDefault()
并传递一个比较泛型类型TId
的谓词时,我会收到以下异常:
被查询类型的接口:无法创建类型为'system.object'的常量值。在此上下文中,只支持原始类型或枚举类型。
interface IEntity<TId>
{
TId id { get; set; }
}
异常在这里抛出:
public virtual TEntity Get<TEntity, TId>(TId id) where TEntity : class, IEntity<TId>
{
return dbContext.Set<TEntity>().FirstOrDefault(e => e.Id.Equals(id));
}
只有当TId
被限制为struct
时,该函数才能正常工作。如何将string
包含在支持的类型中?如果不可能,是否可以用其他方法完成任务?
==
类似的支持。例如考虑[1,2]
和[2,1]
。它们对你来说是相等的吗?顺序重要吗?再比如[null, 1]
和[null,1]
?你在这里是否关心三值逻辑等等。 - UserControl