zoukankan      html  css  js  c++  java
  • Entity Framework Core系列教程-23-原生SQL查询

    在Entity Framework Core中执行原生SQL查询

    Entity Framework Core提供了DbSet.FromSql()方法来对基础数据库执行原始SQL查询,并将结果作为实体对象获取。
    下面的示例演示如何对MS SQL Server数据库执行原始SQL查询。

    var context = new SchoolContext();
    var students = context.Students
                      .FromSql("Select * from Students where Name = 'Bill'")
                      .ToList();
    

    在上面的示例中,在Student实体集(DbSet<Student>)之后使用FromSql()方法,因此指定的SQL查询必须从Student表返回记录,该记录将在Student实体中进行转换。 Entity Framework Core将执行对数据库的指定查询,即在上面的示例中,从* Name ='Bill’的Student中选择*。

    Parameterized Query(参数化查询)

    FromSql方法允许使用C#中的字符串插值语法进行参数化查询,如下所示。

    string name = "Bill";
    var context = new SchoolContext();
    var students = context.Students
                        .FromSql($"Select * from Students where Name = '{name}'")
                        .ToList();
    
    The following is also valid.
    string name = "Bill";
    var context = new SchoolContext();
    var students = context.Students
                        .FromSql("Select * from Students where Name = '{0}'", name)
                        .ToList();
    

    上面的示例将对SQL Server数据库执行以下SQL查询:

    exec sp_executesql N'Select * from Students where Name = ''@p0''
    ',N'@p0 nvarchar(4000)',@p0=N'Bill'
    go
    

    LINQ运算符

    您还可以在使用FromSql方法的原始查询之后使用LINQ运算符。

    string name = "Bill";
    var context = new SchoolContext();
    var students = context.Students
                        .FromSql("Select * from Students where Name = '{0}'", name)
                        .OrderBy(s => s.StudentId)
                        .ToList();
    

    在上面的示例中,EF Core通过将FromSql方法和OrderBy运算符结合在一起执行以下查询。

    exec sp_executesql N'SELECT [s].[StudentId], [s].[Name]
    FROM (
        Select * from Students where Name = ''@p0''
    ) AS [s]
    ORDER BY [s].[StudentId]',N'@p0 nvarchar(4000)',@p0=N'Bill'
    go
    

    FromSql的局限性

    SQL查询必须返回与DbSet<T>类型相同类型的实体。例如如果在学生之后使用FromSql,则指定的查询无法返回课程实体。从FromSql()方法返回临时类型在待办事项列表中。
    SQL查询必须返回表的所有列。例如context.Students.FromSql(“从学生中选择StudentId,LastName).ToList()将引发异常。
    SQL查询不能包含JOIN查询以获取相关数据。在FromSql()方法之后,使用Include方法加载相关实体。

  • 相关阅读:
    react ts axios 配置跨域
    npm run eject“Remove untracked files, stash or commit any changes, and try again.”错误
    java 进程的参数和list的线程安全
    帆软报表 大屏列表跑马灯效果JS
    帆软报表 快速复用数据集,避免重复劳动
    分析云 OA中部门分级思路和实现方法
    分析云 分段器 只显示一个块的数据
    分析云 更改服务默认的端口号
    分析云U8项目配置方法新版本(2)
    Oracle 创建时间维度表并更新是否工作日字段
  • 原文地址:https://www.cnblogs.com/AlexanderZhao/p/12878800.html
Copyright © 2011-2022 走看看