web-dev-qa-db-ja.com

ExecuteSqlCommandとSqlQueryの違いは何ですか? dbアクセスを行うとき?

私のデータベースからデータにアクセスする方法についていくつかの提案がありました。

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

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

これらの違いがある場合、誰かがその違いを説明できますか?

24

SqlQueryメソッドを使用すると、データベースからエンティティを返すことができます。ここで、ExecuteSqlCommandはコマンドを実行し、DBからステータスコードを返します。

詳細はこちら

SqlQuery(エンファシス鉱山)

指定されたtypeの要素を返す生のSQLクエリを作成します。タイプは、クエリから返された列の名前と一致するプロパティを持つ任意のタイプにすることも、単純なプリミティブタイプにすることもできます。タイプはエンティティタイプである必要はありません。返されたオブジェクトのタイプがエンティティタイプであっても、このクエリの結果はコンテキストによって追跡されません。 SqlQueryメソッドを使用して、コンテキストによって追跡されるエンティティを返します。SQLを受け入れるすべてのAPIと同様に、ユーザー入力をパラメーター化して保護するには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"、new SqlParameter( "@ author"、userSuppliedAuthor));

ExecuteSqlCommand戻り値の型:int

指定されたDDL/DMLコマンドをデータベースに対して実行します。 SQLを受け入れるすべてのAPIと同様に、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"、new SqlParameter( "@ author"、userSuppliedAuthor));

40
TheNorthWes