Поделиться через


RelationalQueryableExtensions.FromSqlRaw<TEntity> Метод

Определение

Создает запрос LINQ на основе необработанного SQL-запроса.

public static System.Linq.IQueryable<TEntity> FromSqlRaw<TEntity> (this Microsoft.EntityFrameworkCore.DbSet<TEntity> source, string sql, params object[] parameters) where TEntity : class;
public static System.Linq.IQueryable<TEntity> FromSqlRaw<TEntity> (this Microsoft.EntityFrameworkCore.DbSet<TEntity> source, string sql, params object?[] parameters) where TEntity : class;
static member FromSqlRaw : Microsoft.EntityFrameworkCore.DbSet<'Entity (requires 'Entity : null)> * string * obj[] -> System.Linq.IQueryable<'Entity (requires 'Entity : null)> (requires 'Entity : null)
<Extension()>
Public Function FromSqlRaw(Of TEntity As Class) (source As DbSet(Of TEntity), sql As String, ParamArray parameters As Object()) As IQueryable(Of TEntity)

Параметры типа

TEntity

Тип элементов source.

Параметры

source
DbSet<TEntity>

Объект IQueryable<T> , используемый в качестве основы необработанного SQL-запроса (обычно ).DbSet<TEntity>

sql
String

Необработанный SQL-запрос.

parameters
Object[]

Значения, присваиваемые параметрам.

Возвращаемое значение

IQueryable<TEntity>

Объект , IQueryable<T> представляющий необработанный SQL-запрос.

Комментарии

Если поставщик базы данных поддерживает создание в предоставленном SQL, можно создать поверх необработанного SQL-запроса с помощью операторов LINQ: context.Blogs.FromSqlRaw("SELECT * FROM Blogs").OrderBy(b => b.Name).

Как и в случае с любым API, который принимает SQL, важно параметризовать любые входные данные пользователя для защиты от атак путем внедрения кода SQL. Вы можете включить заполнители параметров в строку ЗАПРОСА SQL, а затем указать значения параметров в качестве дополнительных аргументов. Значения всех указанных параметров будут автоматически преобразованы в DbParameter.

Однако никогда не передайте в этот метод сцепленную или интерполированную строку ($"") с непроверенными значениями, предоставленными пользователем. Это может привести к атакам путем внедрения кода SQL. Чтобы использовать синтаксис интерполированной строки, рассмотрите возможность использования FromSql<TEntity>(DbSet<TEntity>, FormattableString) для создания параметров.

Эта перегрузка также принимает экземпляры DbParameter в качестве значений параметров. Помимо использования позиционных заполнителей, как описано выше ({0}), можно также использовать именованные заполнители непосредственно в строке SQL-запроса.

Дополнительные сведения и примеры см. в статье Выполнение необработанных команд SQL с помощью EF Core .

Применяется к