过去几天我一直在寻找答案,但我无法得到任何答案,这就是我决定写在这里的原因。
问题如下: 我有一个数据服务,其中模型由数据服务提供商创建,在这种情况下是反射提供者。很简单。但我们希望使用查询拦截器创建数据模型,而不是使用查询拦截器来过滤数据。
我想要实现的目标:/service.svc/search?fromDate = x& toDate = y
我有一个名为search的模型,它是搜索数据和搜索结果的模型,然后反射提供者将从theDate和toDate中取出两个参数,将它们保存为变量,然后将它们作为参数存储在存储的sql过程中。然后,searchresult将保存在模型中。
我发现很难解释这一点,因为这不是你用查询拦截器和反射提供程序做的通常的事情。
通常使用查询拦截器并将其应用于完成的数据模型以过滤掉模型的某些部分。
有没有人知道如何实现这个目标?
我知道如何参数化查询拦截器 - http://ashwini47-tts.blogspot.in/2012/03/how-to-parametrized-queryinterceptor-in.html - 但不知道如何将参数发送到dbcontext / objectcontext。
答案 0 :(得分:0)
查询拦截器不是为了解决这个问题。您有两种选择:
1)服务操作,它接受两个参数并返回一组结果。很容易实现,但您还需要公开一组“所有”结果。不确定这是否可能。有可能的解决方法,但它们有点复杂,并且比下面的#2更复杂。
2)将查询描述为OData查询。那么像〜/ searchResults?$ filter = date gt和date lt。然后从searchResults IQueryable属性返回一个自定义IQueryable实现,该实现处理包含过滤器的表达式树,提取from和to值并通过运行存储过程来评估查询。这肯定是更多的工作,但它是OData的查询方式,#1中的服务操作不适合你的空间。