EF Core在mysql中调用存储过程,博主找了很多,然而大多都是EF Core+SqlServer的或者EF Core+Oracle的,并没有正对Mysql的Pomelo驱动的,所以查找了一些资料和博文之后,进行一些修改,最终得到下面的代码。
1. 方式一【FromSql】
搜索到的基本上都这样的方式
using (var dataContext = new DbContext()) {
var param = 1;
var query = dataContext.Table.FromSql($"procname {param}");
var result = query.ToList();
Assert.NotNull(result);
}
然而这种方式有两个弊端,一是Table必须是包含在DbContext中,这也就意味着要建一个对应的表在数据库中,二是这种查询在mysql的pomelo驱动中,会存在一些不完善,导致在数据库直接执行存储过程的结果和在EF Core中调用执行的结果不一致,且还会出现数据集结果全是一样的重复数据,所以这种方式在EF Core+Mysql中不能使用。
2. 方式二【ExecuteReader】
使用最基本的读取方式,这种方式基本上已经脱离了EF上下文,具体可以参考链接EF切EFCore2.0存储过程问题
不过博主的这篇文章是针对sqlserver的,mysql并不使用,所以我改写了一下使用ExecuteReader读取数据的过程,添加一个方法在DbContext类中,代码如下
///添