EntityFrameworkを使用するとSQLをいいように発行してくれるので、SQLをあまり意識しなくて済むようになります。
でも、どんなSQLが発行されているのか気になることがありますよね。
そんな時にSQLを確認する方法を2つ書いておきます。
方法1:DbContext.Database.Logプロパティを使用する
DbContext の Database.Log プロパティを使用すると、発行しているSQLをログ出力できるようになります。
例えば、以下のサンプルのようにデリゲートを書いてあげると、Visual Studioの出力ウィンドウにSQLが出力されるようになります。

サンプル
public class AppDbContext : DbContext { public DbSet<Article> Articles { get; set; } } public class Article { public int Id { get; set; } public string Title { get; set; } public string Contents { get; set; } } class Program { static void Main(string[] args) { Database.SetInitializer(new DropCreateDatabaseAlways<AppDbContext>()); var db = new AppDbContext(); // デバッグ出力にSQLを出力する db.Database.Log = sql => { Debug.Write(sql); }; var article = new Article() { Title = "タイトル", Contents = "本文"}; db.Articles.Add(article); db.SaveChanges(); } }
出力結果
こんな感じに出力されます。
Opened connection at 2014/12/10 2:53:09 +09:00
Started transaction at 2014/12/10 2:53:09 +09:00
CREATE TABLE [dbo].[Articles] (
[Id] [int] NOT NULL IDENTITY,
[Title] [nvarchar](max),
[Contents] [nvarchar](max),
CONSTRAINT [PK_dbo.Articles] PRIMARY KEY ([Id])
)
-- Executing at 2014/12/10 2:53:09 +09:00
-- Completed in 41 ms with result: -1
Committed transaction at 2014/12/10 2:53:09 +09:00
Opened connection at 2014/12/10 2:53:09 +09:00
Started transaction at 2014/12/10 2:53:09 +09:00
INSERT [dbo].[Articles]([Title], [Contents])
VALUES (@0, @1)
SELECT [Id]
FROM [dbo].[Articles]
WHERE @@ROWCOUNT > 0 AND [Id] = scope_identity()
-- @0: 'タイトル' (Type = String, Size = -1)
-- @1: '本文' (Type = String, Size = -1)
-- Executing at 2014/12/10 2:53:09 +09:00
-- Completed in 13 ms with result: SqlDataReader
Committed transaction at 2014/12/10 2:53:09 +09:00
Closed connection at 2014/12/10 2:53:09 +09:00
方法2:SQL Server Profilerを使用する
方法1はソースを弄る必要があるので、本番稼働している場合などはちょっと難しいかもしれません。
そんな時は SQL Server Profiler を使用すればいいと思います。もちろん、データベースに SQL Server を使っている場合のみの方法です。ちなみに、ローカルDBを使用している場合でも使えます。
接続
SQL Server Profiler して SQL Server へ接続します。

ローカルDBの場合はサーバ名の所に「(LocalDb)\v11.0」と入力します*1。
トレースの設定
「全般」タブはデフォルトのままにしておきます。
「イベントの選択」タブでは不要な情報が出力されないよう、「RPC:Completed」と「SQL:BatchCompleted」だけチェックしておきます。

処理を実行して確認
処理を実行すると以下のように発行されたSQLを見ることができます。

*1:バージョンに合わせて変更が必要