现在我正在尝试创建一个在我的存储库中包含外键的通用方法。
我目前得到的是:
public static class ExtensionMethods
{
private static IQueryable<T> IncludeProperties<T>(this DbSet<T> set, params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> queryable = set;
foreach (var includeProperty in includeProperties)
{
queryable = queryable.Include(includeProperty);
}
return queryable;
}
}
但是在编译时我得到错误:
类型&#39; T&#39;必须是引用类型才能将其用作参数 &#39; TEntity&#39;在泛型类型或方法中 &#39; System.Data.Entity.DbSet&#39;
这可能是什么问题?
答案 0 :(得分:7)
将where T : class
附加到方法签名的末尾:
private static IQueryable<T> IncludeProperties<T>(
this DbSet<T> set,
params Expression<Func<T, object>>[] includeProperties)
where T : class // <== add this constraint.
{
...
}
DbSet<TEntity>
有此约束,因此为了使T
类型参数与TEntity
兼容,它必须具有相同的约束。
答案 1 :(得分:0)
如错误消息所述,DbSet
的泛型参数必须是引用类型。您的泛型参数可以是任何内容,包括非引用类型。您需要将其约束为引用类型。