Entity Framework 之存储过程篇

最近几天在搞CRUD,使用的是EF这个ORM,最近的项目中上了存储过程,就把在开发中的经验分享出来!我们先创建一个最基本的存储过程,脚本如下,这是一个不带参数的存储过程,我们从最简单的往上走!

create procedure dbo.ProductsSel
    AS
        BEGIN
        SELECT * FROM Products
    END
GO    

 那么我们API中实际上就是执行了SQL,那么其实这非常简单,都是通过EXECUTE 存储过程名,由于我是用的是.NET Core那么无法可视化去创建EF,命令如下:

Scaffold-DbContext "Server=.;database=EFCore;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model

其中的这个注释可以删除,里面就是一些关于表的配置,表结构啊什么的。

 以FromSql方式调用存储过程

复制代码
[Produces("application/json")]
    [Route("api/Banner")]
    public class BannerController : Controller
    {
        [HttpGet]
        public IEnumerable<Products> GetProducts()
        {
            using (EFCoreContext efcore = new EFCoreContext())
            {
                var query = efcore.Products.FromSql("execute dbo.ProductsSel");
                return query.ToList();
            }
        }
    }
复制代码

下面我们使用PostMan进行测试。

如何带参?呵呵,可能你已经想到了,只不过还是sql的问题,当然我们需要去修改一下我们的存储过程。修改后的脚本如下。

create procedure dbo.ProductsSel
    @cid int
AS
BEGIN
    SELECT * FROM Products
        Where ProductId = @cid
END
GO

调用

复制代码
[HttpGet]
        public IEnumerable<Products> GetProductsById(int id)
        {
            var paramter = new SqlParameter
            {
                DbType = System.Data.DbType.Int32,
                ParameterName = "cid",
                Value = id
            };
            using (EFCoreContext efcore = new EFCoreContext())
            {
                var query = efcore.Products.FromSql("execute dbo.ProductsSel @cid",paramter);
                return query.ToList();
            }
        }
复制代码

 除了以这种东东,还有一个类叫做RelationalDatabaseFacadeExtensions,这里面提供了执行CRUD操作的类。以下是类的结构:

最简单的就可以这么写。

string sql ="select * from xxx"
efcore.Database.ExecuteSqlCommand(sql);

如果你在看这方面内容,SqlQuery这个是EF Core 目前不支持的。我拿着小板凳坐等。。

posted @   ZaraNet  阅读(1469)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
点击右上角即可分享
微信分享提示