如何使用Web API处理复杂的非CRUD操作?

时间:2015-11-27 07:53:43

标签: c# api

如何使用Web API处理复杂的非CRUD操作?

例如,假设我们在存储库中有两个具有复杂查询的方法。这是两个有很多连接的查询。

这可以是实体框架或ADO.Net - 无论如何。

喜欢:让所有学生拥有科目及其教授...... (以及越来越多的加入)... 学生年龄大于x且教授的地位为y ......(以及越来越多的条件)

并且在同一存储库中存在类似的其他操作。所以我们有很多非CRUD操作。

在每个API中,我已经有了GetStudents(在StudentsController中),GetSubjects(在SubjectsController中),GetProfessors(在ProfessorsController中)中的CRUD操作...... 同样适用于'post','put','delete'。

我的主要问题是

  1. 如何设计?
  2. 我应该为此目的创建新的API控制器吗?
  3. 如果我想要使用不同的GetStudents API方法,该怎么办? 条件和联接与不同的表

1 个答案:

答案 0 :(得分:1)

我假设你使用的是像SQL Server这样的数据库。其他RDBMS将具有类似的功能。

只需使用您喜欢的参数定义(内联!)UDF。

在这个UDF中,您可以实现正确的行为:哪些参数可能为NULL以及它们会发生什么?

在您的应用程序中,您需要一个方法来获取所有需要的参数(将可能为null的那些定义为可空类型(如int?)。

所有ORM工具(EF也)都会提供助手,使用所有需要的方法将UDF添加到您的应用程序中。

结果是一个(类型化的)DataTable,包含UDF提供的所有列。

如果您需要不同的查询,不同的连接,真正不同的结构,只需在不同的UDF中定义所有这些。无论如何,你必须在某个地方创建它们。最好在您的RDBMS中完成。如果它是预编译的,它将具有更好的性能,更好地使用索引和统计数据......

老实说:这绝对是基础......每个与数据相关的应用程序都是这样做的。你会发现很多例子。但是你必须分解一个具体的问题。这可以作为答案提供解决方案