【发布时间】:2016-02-14 03:56:48
【问题描述】:
我正在尝试使用以下扩展方法覆盖我的实体的所有 Where() 方法:
public static IQueryable<T> Where<T>(this IQueryable<T> source, Expression<Func<T, bool>> predicate)
{
throw new SecurityException("Use the security SafeWhere method");
}
但是当我使用 context.EntitiesX.Where() 时出现错误:Queryable
我该如何解决这个问题?此外,我希望该扩展方法仅影响实现某些接口的实体,我已经尝试通过指定接口类型而不是通用 T 来尝试,但这不起作用。
【问题讨论】:
-
一种解决方法是不要将其编写为扩展方法。把它写成这样的静态方法
YourClass.Where(context.EntitiesX , ....) -
我想确定基地在哪里被使用
-
您不能覆盖扩展方法。对于编译器来说,它们与静态方法完全相同,当您有两个具有相同签名的方法时,这将导致歧义。
-
重定向
Where扩展方法的目的是什么?如果它仅适用于您的实体,为什么不给它一个不同的名称并完全消除混淆? -
“我想确定没有其他地方使用了基础 Where ” 您无法阻止 - 您无法阻止某人使用
Queryable扩展方法。
标签: c# linq generics entity-framework-6 extension-methods