Supposons simplement que j'ai un besoin valide d'exécuter directement une commande sql dans Entity Framework. J'ai du mal à comprendre comment utiliser les paramètres dans ma déclaration SQL. L'exemple suivant (pas mon vrai exemple) ne fonctionne pas.
var firstName = "John";
var id = 12;
var sql = @"Update [User] SET FirstName = @FirstName WHERE Id = @Id";
ctx.Database.ExecuteSqlCommand(sql, firstName, id);
La méthode ExecuteSqlCommand ne vous permet pas de passer des paramètres nommés comme dans ADO.Net et la documentation de cette méthode ne donne aucun exemple sur la façon d'exécuter une requête paramétrée.
Comment spécifier correctement les paramètres?
entity-framework
entity-framework-4.1
jessegavin
la source
la source
Il s'avère que cela fonctionne.
la source
SqlParameter("@paramName", value)
plutôt.Tu peux soit:
1) Transmettez les arguments bruts et utilisez la syntaxe {0}. Par exemple:
2) Transmettez les arguments de la sous-classe DbParameter et utilisez la syntaxe @ParamName.
Si vous utilisez la première syntaxe, EF encapsulera vos arguments avec les classes DbParamater, leur attribuera des noms et remplacera {0} par le nom du paramètre généré.
La première syntaxe est préférée car vous n'avez pas besoin d'utiliser une fabrique ou de savoir quel type de DbParamaters créer (SqlParameter, OracleParamter, etc.).
la source
Les autres réponses ne fonctionnent pas lors de l'utilisation d'Oracle. Vous devez utiliser
:
au lieu de@
.la source
Essayez ceci (édité):
L'idée précédente était fausse.
la source
Pour l'entité Framework Core 2.0 ou supérieure, la bonne façon de procéder est la suivante:
Notez qu'Entity Framework produira les deux paramètres pour vous, vous êtes donc protégé contre l'injection SQL.
Notez également qu'il ne s'agit PAS:
car cela ne vous protège PAS contre l'injection SQL et aucun paramètre n'est produit.
Voir ceci pour plus.
la source
ctx.Database.ExecuteSqlCommand("Update [User] SET FirstName = {firstName} WHERE Id = {id}", firstName, id);
FormattableString
. Tu as raison et c'est plutôt cool!Version simplifiée pour Oracle. Si vous ne souhaitez pas créer OracleParameter
la source
C'est tellement simple !!!
Image pour connaître la référence des paramètres
la source
Pour la méthode async ("ExecuteSqlCommandAsync"), vous pouvez l'utiliser comme ceci:
la source
Si vos types de données de base de données sous-jacents sont varchar, vous devez vous en tenir à l'approche ci-dessous. Sinon, la requête aurait un impact énorme sur les performances.
Vous pouvez vérifier le profileur SQL pour voir la différence.
la source
Usage:
la source
ExecuteSqlCommand()
Vous devez être sûr de répondre à la question spécifique posée lorsque vous publiez des réponses.Plusieurs paramètres dans une procédure stockée qui a plusieurs paramètres dans vb:
la source
Les procédures stockées peuvent être exécutées comme ci-dessous
la source
Pour .NET Core 2.2, vous pouvez utiliser
FormattableString
pour SQL dynamique.la source