目前EF Core调用存储过程,限制很多,比如返回结果必须是定义好的DbSet<>等等。这里用一种曲线救国的方式,自定义两个方法,用原始ado.net解决问题。以MySql数据库为例,代码如下:

 namespace WebApi.Core.Data
{
using System.Data;
using System.Linq; using Microsoft.EntityFrameworkCore; using MySql.Data.MySqlClient; public class TestContext : DbContext
{
public TestContext(DbContextOptions<TestContext> options)
: base(options)
{
} public int ExcuteProcedure(string parcedureName, params MySqlParameter[] ps)
{
using (var cmd = this.Database.GetDbConnection().CreateCommand())
{
cmd.CommandText = parcedureName;
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddRange(ps);
this.Database.OpenConnection();
var r = cmd.ExecuteNonQuery();
this.Database.CloseConnection();
return r;
}
} public object ExcuteFunction(string functionName, params MySqlParameter[] ps)
{
using (var cmd = this.Database.GetDbConnection().CreateCommand())
{
// 参数字符串,传参时注意顺序
var pString =
$"'{ps.Aggregate(string.Empty, (c, n) => $"{c}','{n.Value}").TrimStart(new[] { ',', '\'' })}'"; // 可用this.Database.IsXXX(),判读数据库类型,拼command字符串,这里不写了
cmd.CommandText = $"select {functionName}({pString});";
this.Database.OpenConnection();
var r = cmd.ExecuteScalar();
this.Database.CloseConnection();
return r;
}
} protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
}
}
}

最新文章

  1. Node-Webkit打包
  2. 速算1/Sqrt(x)背后的数学原理
  3. 简单介绍一下python Queue中常用的方法
  4. java分享第七天-03(递归打印文件目录的树状结构)
  5. Spark相关下载
  6. Tmux
  7. Install Hive
  8. 【MySQL】MySQL的find_in_set的使用例子
  9. CodeForces 710C Magic Odd Square (n阶奇幻方)
  10. Java各种类型占用的字节数
  11. 获取字符串对应的MD5值 (AL16UTF16LE)
  12. iOS runloop 资源汇总-b
  13. javascript随手记
  14. css属性之!important
  15. Rotate It !!(思维)
  16. VMWare的网络
  17. 并行(Parallelism)与并发(Concurrency)
  18. LordPE修复从进程dump出来的内存文件
  19. 前端Js框架 UI框架汇总 特性 适用范围 选择
  20. Linux 堆溢出原理分析

热门文章

  1. Spring 依赖注入(控制反转)介绍
  2. [Contest20180418]物理竞赛
  3. linux下内存释放问题
  4. Xcode 5 单元测试(一)使用XCTest进行单元测试
  5. 死磕 Fragment 的生命周期
  6. 记一次有惊无险的Linux数据恢复过程
  7. 前端打包利器:webpack工具
  8. nginx简单实现反向代理和静态资源服务器
  9. 利用yarn多队列实现hadoop资源隔离
  10. Linux Shell常用技巧