iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > ASP.NET >EntityFrameworkCore中执行SQL语句和存储过程的方法介绍
  • 201
分享到

EntityFrameworkCore中执行SQL语句和存储过程的方法介绍

2024-04-02 19:04:59 201人浏览 八月长安
摘要

无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求。在这篇文章中,我们介绍几种执行sql的方法。 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构。

无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求。在这篇文章中,我们介绍几种执行sql的方法。

表结构

在具体内容开始之前,我们先简单说明一下要使用的表结构。

    public class CateGory
    {

        public int CategoryID { get; set; }
        
        public string CategoryName { get; set; }
    }

Category定义了两个字段:CategoryIDCategoryName

    public class SampleDbContext : DbContext
    {
        public virtual DbSet<Category> Categories { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var sqlConnectionStringBuilder = new SqlConnectionStringBuilder {
                DataSource = "10.0.1.5",
                InitialCatalog = "TestDataBase",
                UserID = "sa",
                PassWord = "******"
            };
            optionsBuilder.UseSqlServer(sqlConnectionStringBuilder.ConnectionString);

            base.OnConfiguring(optionsBuilder);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
            EntityTypeBuilder<Category> entityTypeBuilder = modelBuilder.Entity<Category>();
            entityTypeBuilder.ToTable("Category");
            entityTypeBuilder.HasKey(e => e.CategoryID);
            entityTypeBuilder.Property(e => e.CategoryID).UseSqlServerIdentityColumn();
        }
    }

我们使用SampleDbContext来访问数据库

FromSql执行SQL语句

Entity Framework Core为DbSet<TEntity>提供了一个扩展方法FromSql,用于执行SQL语句或存储过程,以下示例使用FromSql加载所有的数据。

        using (var dataContext = new SampleDbContext()) {
        
            var query = dataContext.Categories.FromSql("select * from Category");

            var result = query.ToList();
        }

对于带有参数的SQL语句,我们使用C# 6 语法将SQL写成如下:

        using (var dataContext = new SampleDbContext()) {
        
            var categoryID = 1;
            
            var query = dataContext.Categories.FromSql($"select * from Category where CategoryID={categoryID}");

            var result = query.ToList();
        }

注意:这里不是直接使用拼接的方式处理SQL,而是转化为参数化的SQL语句,这有助于防止SQL注入攻击。我们可以使用SQL Server Profiler帮我们验证:

exec sp_executesql N'select * from Category where CategoryID=@p0
',N'@p0 int',@p0=1

如果您不使用C# 6的语法特征,我们必须使用 @p0、@p1 ... @pn 做为SQL语句的参数:

        using (var dataContext = new SampleDbContext()) {

            var categoryID = 1;
            var categoryName = "Product";
            
            var query = dataContext.Categories.FromSql("select * from Category where CategoryID=@p0 and CategoryName=@p1"
            categoryID, categoryName);

            var result = query.ToList();

            Assert.NotNull(result);
        }

在上述SQL语句中中,将@p0映射到categoryID@ p1映射到categoryName

FromSql扩展方法返回的是IQueryable<TEntity>对象,要们还可以接着使用一些Linq的方法,示例如下:

       using (var dataContext = new SampleDbContext()) {

           var categoryID = 1;

           var query = dataContext.Categories.FromSql("select * from Category")
               .Where(item => item.CategoryID == categoryID)
               .OrderBy(item => item.CategoryName);

           var result = query.ToList();
       }

不过在这里,使用的是子查询,使用SQL Server Profiler捕获到的SQL语句如下:

exec sp_executesql N'SELECT [item].[CategoryID], [item].[CategoryName]
FROM (
    select * from Category
) AS [item]
WHERE [item].[CategoryID] = @__categoryID_1
ORDER BY [item].[CategoryName]',N'@__categoryID_1 int',@__categoryID_1=1

提示:使用FromSql时,需要在执行的SQL语句中返回所有列,并且列名必须与实体属性名相匹配,否则执行会出错。

FromSql执行存储过程

存储过程与SQL语句写法基本一致,使用存储过程的示例如下:

       using (var dataContext = new SampleDbContext()) {

           var categoryID = 1;
           var query = dataContext.Categories.FromSql($"GetCategoryById {categoryID}");


           var result = query.ToList();

           Assert.NotNull(result);
       }

这些参数的顺序必须与存储过程参数的顺序一致。

提示:使用FromSql执行存储过程时,如果使用'Where'、'OrderBy'等Linq语法,这些操作不会生成SQL语句,而是在.net中对存储过程返回的集合进行过滤与排序

ExecuteSqlCommand

DbContext暴露了一个Database属性,它包括一个ExecuteSqlCommand方法。此方法返回一个整数,表示执行的SQL语句影响的行数。有效的操作是INSERTUPDATEDELETE,不能用于返回实体。

       using (var dataContext = new SampleDbContext())
       {
           var categoryID = 1;
           var categoryName = "Product";
           
           var result = dataContext.Database.ExecuteSqlCommand($"UPDATE dbo.Category SET CategoryName={categoryName} WHERE CategoryID={categoryID}");
       }

总结

到此这篇关于Entity Framework Core中执行SQL语句和存储过程的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: EntityFrameworkCore中执行SQL语句和存储过程的方法介绍

本文链接: https://www.lsjlt.com/news/139918.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • EntityFrameworkCore中执行SQL语句和存储过程的方法介绍
    无论ORM有多么强大,总会出现一些特殊的情况,它无法满足我们的要求。在这篇文章中,我们介绍几种执行SQL的方法。 表结构 在具体内容开始之前,我们先简单说明一下要使用的表结构。 ...
    99+
    2024-04-02
  • mysql中执行存储过程的语句怎么写
    这篇文章主要介绍了mysql中执行存储过程的语句怎么写的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql中执行存储过程的语句怎么写文章都会有所收获,下面我们一起来看看吧。...
    99+
    2024-04-02
  • prepareCall()方法执行存储过程
    在Java中,可以使用prepareCall()方法来执行存储过程。首先,需要获取一个连接对象 Connection,然后使用该连接...
    99+
    2023-09-14
    prepareCall()
  • SQL查询语句执行的过程
    目录MySQL基本架构Server 层1、连接器2、查询缓存3、分析器4、优化器5、执行器SQL语句举例: SELECT * FROM `test` WHERE `i...
    99+
    2024-04-02
  • navicat执行sql语句的方法
    小编给大家分享一下navicat执行sql语句的方法,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!首先要在navicat的【查询编辑器】中编写可执行的sql语句当我们在【查询编辑器】中编写完S...
    99+
    2024-04-02
  • MySql中sql语句执行过程是什么
    今天小编给大家分享一下MySql中sql语句执行过程是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。sql语句的执行过程...
    99+
    2023-07-05
  • MyBatis的SQL语句执行过程是什么
    这篇文章主要介绍“MyBatis的SQL语句执行过程是什么”,在日常操作中,相信很多人在MyBatis的SQL语句执行过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MyBatis的SQL语句执行过程...
    99+
    2023-06-30
  • Oracle数据库SQL语句的执行过程
    这篇文章主要讲解了“Oracle数据库SQL语句的执行过程”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Oracle数据库SQL语句的执行过程”吧!1、用户...
    99+
    2024-04-02
  • MySql中sql语句执行过程详细讲解
    目录前言:sql语句的执行过程:查询缓存:分析器:优化器:执行器:总结前言: 很多人都在使用mysql数据库,但是很少有人能够说出来整个sql语句的执行过程是怎样的,如果不了解执行过程的话,就很难进行sql语句的优化处理...
    99+
    2023-02-21
    mysql的sql语句的执行流程 mysql的sql执行顺序 mysql如何执行语句
  • sql语句中with as的用法介绍
    本篇内容介绍了“sql语句中with as的用法介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! ...
    99+
    2024-04-02
  • SQL中怎么用语句查看存储过程
    在SQL中,可以使用以下语句来查看存储过程:sqlSHOW PROCEDURE STATUS;这条语句将显示数据库中所有存储过程的信...
    99+
    2023-10-18
    SQL
  • plsql执行存储过程的方法是什么
    在PL/SQL中执行存储过程有以下几种方法:1. 使用EXECUTE语句:可以使用EXECUTE或EXEC来执行存储过程。例如,EX...
    99+
    2023-09-28
    plsql
  • SQL语句解析执行的过程及原理
    目录一、sqlSession简单介绍二、获得sqlSession对象源码分析三、SQL执行流程,以查询为例一、sqlSession简单介绍 拿到SqlSessionFactory对象...
    99+
    2024-04-02
  • 一条SQL语句执行过程时怎样的
    本篇内容主要讲解“一条SQL语句执行过程时怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“一条SQL语句执行过程时怎样的”吧!一、MySQL 体系架构- 连接池组件负责与客户端的通信,是半双...
    99+
    2023-06-29
  • SQL查询语句执行的过程是什么
    这篇文章主要介绍“SQL查询语句执行的过程是什么”,在日常操作中,相信很多人在SQL查询语句执行的过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”SQL查询语句执行的过程是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • 存储过程中的MySQL PREPARE语句
    MySQL PREPARE语句用于在存储过程中动态准备和执行SQL语句。它的语法如下:```PREPARE statement_na...
    99+
    2023-09-27
    MySQL
  • sql通用存储过程的语法
    本篇内容主要讲解“sql通用存储过程的语法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“sql通用存储过程的语法”吧!Transact-SQL中的存储过程,非常...
    99+
    2024-04-02
  • SQLserver存储过程写法与设置定时执行存储过程方法详解
    目录最近工作中需要写SQLserver的存储过程,第一次使用,简单记录下,以防遗忘。 在SQLserver可视化工具中编写,我的工具如下图: 首先点击你的数据库,找到可编程性,在可...
    99+
    2023-03-13
    sqlserver 定时执行存储过程 SQLserver存储过程 sqlserver存储过程写法
  • MySql动态sql语句带参数的存储过程
    这篇文章主要介绍“MySql动态sql语句带参数的存储过程”,在日常操作中,相信很多人在MySql动态sql语句带参数的存储过程问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”...
    99+
    2024-04-02
  • 一条SQL更新语句的执行过程解析
    目录一、执行过程二、日志模块1、物理日志redo logredo log的使用场景redolog配置2、逻辑日志binlog两阶段提交binlog使用场景前言: 上一篇文章讲解了SQ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作