如何使用Web API处理复杂的非CRUD操作?
例如,假设我们在存储库中有两个具有复杂查询的方法。这是两个有很多连接的查询。
这可以是实体框架或ADO.Net - 无论如何。
喜欢:让所有学生拥有科目及其教授...... (以及越来越多的加入)... 学生年龄大于x且教授的地位为y ......(以及越来越多的条件)
并且在同一存储库中存在类似的其他操作。所以我们有很多非CRUD操作。
在每个API中,我已经有了GetStudents(在StudentsController中),GetSubjects(在SubjectsController中),GetProfessors(在ProfessorsController中)中的CRUD操作...... 同样适用于'post','put','delete'。
我的主要问题是
答案 0 :(得分:1)
我假设你使用的是像SQL Server这样的数据库。其他RDBMS将具有类似的功能。
只需使用您喜欢的参数定义(内联!)UDF。
在这个UDF中,您可以实现正确的行为:哪些参数可能为NULL以及它们会发生什么?
在您的应用程序中,您需要一个方法来获取所有需要的参数(将可能为null的那些定义为可空类型(如int?
)。
所有ORM工具(EF也)都会提供助手,使用所有需要的方法将UDF添加到您的应用程序中。
结果是一个(类型化的)DataTable,包含UDF提供的所有列。
如果您需要不同的查询,不同的连接,真正不同的结构,只需在不同的UDF中定义所有这些。无论如何,你必须在某个地方创建它们。最好在您的RDBMS中完成。如果它是预编译的,它将具有更好的性能,更好地使用索引和统计数据......
老实说:这绝对是基础......每个与数据相关的应用程序都是这样做的。你会发现很多例子。但是你必须分解一个具体的问题。这可以作为答案提供解决方案。