我有一个旧的SQL Server数据库,存储过程在该数据库中根据所获取的SQL参数返回不同的数据集-单个表但具有不同的列。我知道决策很差,但是我无法更改,因为它已连接到旧版软件。
使用EF Core 3.1,我尝试使用一种方法来处理该存储过程的执行。我知道根据切换参数@reportFormat
的值可以期望的数据集。但是,数据库中没有任何一个表与返回的任何表匹配,因此我无法在拥有的EF上下文中使用这些模型。
所以,我不能打电话:
var things = await db.SomeTable.FromSqlRaw("sp_ListSomething @mcpID, @reportFormat",
mcpID, reportFormat).ToListAsync();
因为SomeTable
与我从sp_ListSomething
获得的数据集不匹配。
我尝试按照Execute a stored procedure that gets data from multiple tables in EF Core的建议扩展DbContext
。它有效,但是包含许多switch
和typeof(T)
语句。
我还研究了GitHub.com/snickler/EFCore-FluentStoredProcedure的工作原理。
尽管这两种解决方案都能完成工作,但对于我来说,它们对于我来说看起来太麻烦了。
是否有一种更简单的方法来调用存储过程,并通过提供需要数据的类(甚至使用<T>
)将结果分成不同的类型?