2016-02-10 23 views
11

私のアプリケーションをASP.NET MVCコアとEntity Frameworkコアに移行しましたが、問題が見つかりました。私はこのRaw SQLクエリとEntity Frameworkコア

var rawSQL = dbContext.Database.SqlQuery<SomeModel>("Raw SQL Query").ToList(); 

のようなエンティティに生のSQLクエリを持っている。しかしcontext.DatabaseにはSqlQuery<T>はありません。この問題の解決法はありますか?

+0

'dbContext'が適切' Entities'として初期化されます。

var rawSQL = dbContext.SomeModels.FromSql("your SQL"); 

さらに良いことに、代わりに(SQLインジェクション攻撃の危険にさらされて)生のSQLを使用してこのFromSql方法は、あなたのようなパラメータ化クエリを使用することができますか? –

+0

@MatchesMaloneはい、正常に動作する通常のLINQクエリ – Obin

+0

拡張メソッドを使用してパラメータ化されたSQLを使用する方法については、私の答えを参照してください。 – iberodev

答えて

11

は、あなたが使用できる拡張メソッドがあるので、あなたがusing Microsoft.Data.Entity; を追加していることを確認します。

dbContext.SomeModels.FromSql("SELECT * FROM dbo.Blogs WHERE Name = @p0", blogName); 
+0

正常に動作しますが、通常はデータベースよりも特定のエンティティモデルからの奇妙な呼び出しSQLクエリです。注射について私が知っている攻撃と私はSQLのパラメータを使用していますが、私は例では簡単な問題を示したかったのです。ありがとう – Obin

+0

@iberodevあなたのSQLクエリに2つのテーブルが含まれているとどうしますか? '.INCLUDE(B => b.Posts)を添加することによりhttps://docs.efproject.net/en/latest/querying/raw-sql.html#composing-with-linq ':ここに示されているように – nam

+0

@namあなたは別のテーブルに参加しています – iberodev

関連する問題