• 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 目前不支持的。我拿着小板凳坐等。。

  • 相关阅读:

    暴力求解/数学问题
    Leetcode207. Course Schedule
    Balanced Team
    由先序和中序求后序
    Median String
    树的同构
    uva 202
    整除光棍
    阅览室
  • 原文地址:https://www.cnblogs.com/ZaraNet/p/10276965.html
Copyright © 2020-2023  润新知