当我通过传递比较泛型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
包含为支持的类型?如果不可能,是否有可能以不同的方式完成任务?
答案 0 :(得分:1)
这也适用于字符串:
public virtual TEntity Get<TEntity, TId>(TId id)
where TEntity : class, IEntity<TId>
where TId: IEquatable<TId>
{
return dbContext.Set<TEntity>().FirstOrDefault(e => e.Id.Equals(id));
}
答案 1 :(得分:1)
您只需使用Find
方法:
public virtual TEntity Get<TEntity, TId>(TId id) where TEntity : class, IEntity<TId>
{
return dbContext.Set<TEntity>().Find(id);
}