web-dev-qa-db-fra.com

Quelle est la différence entre ExecuteSqlCommand et SqlQuery? lors d'un accès db?

J'ai eu quelques suggestions sur la façon d'accéder aux données de ma base de données:

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

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

Quelqu'un peut-il expliquer la différence entre ceux-ci s'il y en a?

24
Samantha J T Star

La méthode SqlQuery vous permet de renvoyer des entités de la base de données. Où as ExecuteSqlCommand exécute simplement la commande et renvoie le code d'état de la base de données.

Plus ici

SqlQuery (Mine d'accentuation)

Crée une requête SQL brute qui renverra des éléments du type donné . Le type peut être tout type dont les propriétés correspondent aux noms des colonnes renvoyées par la requête, ou peut être un simple type primitif. Le type ne doit pas nécessairement être un type d'entité. Les résultats de cette requête ne sont jamais suivis par le contexte même si le type d'objet renvoyé est un type d'entité. Utilisez la méthode SqlQuery pour renvoyer les entités suivies par le contexte. Comme pour toute API qui accepte SQL, il est important de paramétrer toute entrée utilisateur pour se protéger contre une attaque par injection SQL. Vous pouvez inclure des espaces réservés de paramètre dans la chaîne de requête SQL, puis fournir des valeurs de paramètre comme arguments supplémentaires. Toutes les valeurs de paramètre que vous fournissez seront automatiquement converties en DbParameter. context.Database.SqlQuery (typeof (Post), "SELECT * FROM dbo.Posts WHERE Author = @ p0", userSuppliedAuthor); Alternativement, vous pouvez également construire un DbParameter et le fournir à SqlQuery. Cela vous permet d'utiliser des paramètres nommés dans la chaîne de requête SQL. context.Database.SqlQuery (typeof (Post), "SELECT * FROM dbo.Posts WHERE Author = @author", new SqlParameter ("@ author", userSuppliedAuthor));

ExecuteSqlCommand Type de retour: int

Exécute la commande DDL/DML donnée sur la base de données. Comme pour toute API acceptant SQL, il est important de paramétrer toute entrée utilisateur pour se protéger contre une attaque par injection SQL. Vous pouvez inclure des espaces réservés de paramètre dans la chaîne de requête SQL, puis fournir des valeurs de paramètre comme arguments supplémentaires. Toutes les valeurs de paramètre que vous fournissez seront automatiquement converties en DbParameter. context.Database.ExecuteSqlCommand ("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @ p0", userSuppliedAuthor); Alternativement, vous pouvez également construire un DbParameter et le fournir à SqlQuery. Cela vous permet d'utiliser des paramètres nommés dans la chaîne de requête SQL. context.Database.ExecuteSqlCommand ("UPDATE dbo.Posts SET Rating = 5 WHERE Author = @author", new SqlParameter ("@ author", userSuppliedAuthor));

40
TheNorthWes