【发布时间】:2014-04-21 18:31:51
【问题描述】:
我正在阅读有关query interceptors 的信息。我很失望,因为那更像是过滤器而不是拦截器。换句话说,您可以选择包含或不包含记录。例如,您无法修改记录。
如果我想为我的实体 Users 创建一个查询拦截器,我可以这样做:
[QueryInterceptor("Users")] // apply to table users
public Expression<Func<User, bool>> UsersOnRead()
{
return cust => cust.IsDeleted == false;
}
如果我改为创建操作会怎样: 请注意,操作名称必须与实体名称一样,否则将无法正常工作
[WebGet]
public IEnumerable<User> Users()
{
return this.CurrentDataSource.Users.Where(x=>x.IsDeleted==false);
}
放置此方法而不是查询拦截器使我的服务行为完全相同。加上我有更多的权力!采用这种方法是不是更好的解决方案?
【问题讨论】:
-
这是一个非常有趣的观点。对实体的更新是否有效,或者 WebGet 是否也会覆盖它?此外,如果您想支持查询选项,您将需要公开 IQueryable 而不是 IEnumerable。我猜 WCF 团队没有想到这种情况,所以如果您遇到任何问题,您可能会靠自己。
-
如果我想更新引用,我必须取消注释这些操作。在客户端应用程序上添加服务引用后,我可以取消注释这些操作并且效果很好。
标签: c# security wcf-data-services queryinterceptor