entity framework core 调用存储过程和方法
2024-10-11 04:26:26
目前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)
{
}
}
}
最新文章
- Node-Webkit打包
- 速算1/Sqrt(x)背后的数学原理
- 简单介绍一下python Queue中常用的方法
- java分享第七天-03(递归打印文件目录的树状结构)
- Spark相关下载
- Tmux
- Install Hive
- 【MySQL】MySQL的find_in_set的使用例子
- CodeForces 710C Magic Odd Square (n阶奇幻方)
- Java各种类型占用的字节数
- 获取字符串对应的MD5值 (AL16UTF16LE)
- iOS runloop 资源汇总-b
- javascript随手记
- css属性之!important
- Rotate It !!(思维)
- VMWare的网络
- 并行(Parallelism)与并发(Concurrency)
- LordPE修复从进程dump出来的内存文件
- 前端Js框架 UI框架汇总 特性 适用范围 选择
- Linux 堆溢出原理分析