Vamos supor que eu tenha uma necessidade válida de executar diretamente um comando sql no Entity Framework. Estou tendo problemas para descobrir como usar parâmetros na minha instrução sql. O exemplo a seguir (não o meu exemplo real) não funciona.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
O método ExecuteSqlCommand não permite que você transmita parâmetros nomeados como no ADO.Net e a documentação desse método não fornece exemplos de como executar uma consulta parametrizada.
Como especifico os parâmetros corretamente?
entity-framework
entity-framework-4.1
jessegavin
fonte
fonte
Acontece que isso funciona.
fonte
SqlParameter("@paramName", value)
vez disso.Você também pode:
1) Passe argumentos brutos e use a sintaxe {0}. Por exemplo:
2) Passe argumentos da subclasse DbParameter e use a sintaxe @ParamName.
Se você usar a primeira sintaxe, o EF encerrará seus argumentos com as classes DbParamater, atribuirá nomes a eles e substituirá {0} pelo nome do parâmetro gerado.
A primeira sintaxe, se preferir, porque você não precisa usar uma fábrica ou saber que tipo de DbParamaters criar (SqlParameter, OracleParamter, etc.).
fonte
As outras respostas não funcionam ao usar o Oracle. Você precisa usar em
:
vez de@
.fonte
Tente isto (editado):
A ideia anterior estava errada.
fonte
Para a entidade Framework Core 2.0 ou superior, a maneira correta de fazer isso é:
Observe que o Entity Framework produzirá os dois parâmetros para você, para que você esteja protegido contra a injeção de SQL.
Observe também que NÃO é:
porque isso NÃO o protege da injeção SQL e nenhum parâmetro é produzido.
Veja isso para mais.
fonte
ctx.Database.ExecuteSqlCommand("Update [User] SET FirstName = {firstName} WHERE Id = {id}", firstName, id);
FormattableString
. Você está certo e isso é muito legal!Versão simplificada para Oracle. Se você não deseja criar OracleParameter
fonte
Isso é tão simples !!!
Imagem para conhecer a referência de parâmetro
fonte
Para o método async ("ExecuteSqlCommandAsync"), você pode usá-lo assim:
fonte
Se seus tipos de dados de banco de dados subjacentes são varchar, você deve seguir a abordagem abaixo. Caso contrário, a consulta teria um enorme impacto no desempenho.
Você pode verificar o Sql Profiler para ver a diferença.
fonte
Uso:
fonte
ExecuteSqlCommand()
Você não se esqueça de responder à pergunta específica que está sendo feita quando publicar as respostas.Vários parâmetros em um procedimento armazenado que possui vários parâmetros na vb:
fonte
Procedimentos armazenados podem ser executados como abaixo
fonte
Para o .NET Core 2.2, você pode usar
FormattableString
o SQL dinâmico.fonte