我有一个带有多个Web API控制器的应用程序,现在我有一个要求,该要求是能够按对象属性筛选GET结果。我一直在考虑使用OData,但由于以下几个原因,我不确定它是否合适:
DataContext
,而是通过“域”层从数据库中获取数据,因此无法查看我们的实体框架模型。我基于#3进入错误的轨道了吗?如果没有,我们是否可以使用此OData库而无需大量重构Web API和EF的交互方式?
答案 0 :(得分:1)
我还没有OData的经验,但是从我的眼中可以看出,它是为Context提供的,旨在管理这些模型的交互和返回。我绝对不喜欢以任何形式将实体返还给客户。
这是一个丑陋的情况,但是面对这种情况,我的第一个行动方案是推回客户以证明其搜索需求的合理性。默认请求几乎总是“好吧,能够对所有内容进行搜索会很好。”我的回答是,我不想知道你想要什么,我想知道你需要什么,因为我不想给你装满枪的枪,用自己的脚砸掉然后又怪我,因为系统停止运转。如果搜索过于开放,搜索将是巨大的性能杀手。当用户仅需要25%的情况时,就很难测试准确性/相关性,并且无法有效地为100%的可能搜索案例建立索引。如果客户不能告诉您他们将需要什么搜索,而只是因为他们可能需要它们而只想要一切,那么他们就不需要了。
我个人坚持使用特定的搜索DTO,并将其转换为linq表达式。
如果我面临实施这样的硬性要求,我会:
不。 1.是可选的,很高兴提供给他们,使他们可以在不被“看到”更新的条件(直到被复制)之前进行搜索。 (即几秒钟到几分钟不等,具体取决于复制策略/大小)这些搜索通常用于报表类型的查询,因此我会尽量将其与用户使用的常规日常搜索选项区分开。 (即高级搜索选项等)。