Подтвердить что ты не робот

В чем разница между ExecuteSqlCommand и SqlQuery? когда вы делаете доступ к db?

У меня было несколько предложений о том, как обращаться к данным из моей базы данных:

var allMyIds
    = context.Database.ExecuteSqlCommand("select id from AspNetUserLogins");

var allMyIds
    = context.Database.SqlQuery<string>("select id from AspNetUserLogins");

Может кто-нибудь объяснить разницу между ними, если они есть?

4b9b3361

Ответ 1

Метод SqlQuery позволяет вам возвращать объекты из базы данных. Где в качестве ExecuteSqlCommand просто запускается команда и возвращает код состояния из БД.

Подробнее здесь

SqlQuery (Акцент Мой)

Создает необработанный SQL-запрос, который будет возвращать элементы данного типа . Тип может быть любым типом, который имеет свойства, которые соответствуют именам столбцов, возвращаемых из запроса, или может быть простым примитивным типом. Тип не должен быть типом объекта. Результаты этого запроса никогда не отслеживаются контекстом, даже если тип возвращаемого объекта является типом объекта. Использовать метод SqlQuery для возврата объектов, отслеживаемых контекстом. Как и любой API, который принимает SQL, важно параметризовать любой пользовательский ввод для защиты от атаки SQL-инъекции. Вы можете включить держатели параметров в строку запроса SQL, а затем указать значения параметров в качестве дополнительных аргументов. Любые значения параметров, которые вы поставляете, будут автоматически преобразованы в DbParameter. context.Database.SqlQuery(typeof (Post), "SELECT * FROM dbo.Posts WHERE Author = @p0", userSuppliedAuthor); Кроме того, вы также можете создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке запроса SQL. context.Database.SqlQuery(typeof (Post), "SELECT * FROM dbo.Posts WHERE Author = @author", новый SqlParameter ( "@author", userSuppliedAuthor));

ExecuteSqlCommand Тип возврата: int

Выполняет заданную команду DDL/DML для базы данных. Как и любой API, который принимает SQL, важно параметризовать любой пользовательский ввод для защиты от атаки SQL-инъекции. Вы можете включить держатели параметров в строку запроса SQL, а затем указать значения параметров в качестве дополнительных аргументов. Любые значения параметров, которые вы поставляете, будут автоматически преобразованы в DbParameter. context.Database.ExecuteSqlCommand( "UPDATE dbo.Posts SET Rating = 5 WHERE Author = @p0", userSuppliedAuthor); Кроме того, вы также можете создать DbParameter и передать его в SqlQuery. Это позволяет использовать именованные параметры в строке запроса SQL. context.Database.ExecuteSqlCommand( "UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", новый SqlParameter ( "@author", userSuppliedAuthor));