Давайте просто предположим, что у меня есть действительная потребность в непосредственном выполнении команды sql в Entity Framework. У меня возникли проблемы с выяснением, как использовать параметры в моей инструкции SQL. Следующий пример (не мой настоящий пример) не работает.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
Метод ExecuteSqlCommand не позволяет передавать именованные параметры, как в ADO.Net, а документация для этого метода не дает примеров того, как выполнить параметризованный запрос.
Как правильно указать параметры?
entity-framework
entity-framework-4.1
jessegavin
источник
источник
Оказывается, это работает.
источник
SqlParameter("@paramName", value)
вместо этого.Вы также можете:
1) Передайте необработанные аргументы и используйте синтаксис {0}. Например:
2) Передайте аргументы подкласса DbParameter и используйте синтаксис @ParamName.
Если вы используете первый синтаксис, EF фактически обернет ваши аргументы классами DbParamater, присвоит им имена и заменит {0} сгенерированным именем параметра.
Первый синтаксис предпочтителен, потому что вам не нужно использовать фабрику или знать, какой тип DbParamaters нужно создать (SqlParameter, OracleParamter и т. Д.).
источник
Другие ответы не работают при использовании Oracle. Вам нужно использовать
:
вместо@
.источник
Попробуйте это (отредактировано):
Предыдущая идея была неверной.
источник
Для Entity Framework Core 2.0 или выше, правильный способ сделать это:
Обратите внимание, что Entity Framework предоставит вам два параметра, поэтому вы защищены от Sql Injection.
Также обратите внимание, что это НЕ:
потому что это НЕ защищает вас от впрыска Sql, и никакие параметры не производятся.
Смотрите это больше.
источник
ctx.Database.ExecuteSqlCommand("Update [User] SET FirstName = {firstName} WHERE Id = {id}", firstName, id);
FormattableString
. Вы правы и это довольно круто!Упрощенная версия для Oracle. Если вы не хотите создавать OracleParameter
источник
Это так просто !!!
Изображение для знания ссылки на параметр
источник
Для асинхронного метода («ExecuteSqlCommandAsync») вы можете использовать его следующим образом:
источник
Если ваши базовые типы данных базы данных varchar, вам следует придерживаться подхода, приведенного ниже. В противном случае запрос будет иметь огромное влияние на производительность.
Вы можете проверить Sql Profiler, чтобы увидеть разницу.
источник
Использование:
источник
ExecuteSqlCommand()
Вам следует обязательно ответить на конкретный вопрос, задаваемый при публикации ответов.Несколько параметров в хранимой процедуре, которая имеет несколько параметров в vb:
источник
Хранимые процедуры могут быть выполнены как ниже
источник
Для .NET Core 2.2 вы можете использовать
FormattableString
для динамического SQL.источник