読者です 読者をやめる 読者になる 読者になる

1.21 jigowatts

Great Scott!

Entity Framework6をVisual Studio2010で使ってみる

前回C#基礎に引き続き、DBアプリケーションのセミナーにも行ってきました!
最新バージョン(2014/2/8現在)のEntity Framework6(以降EF)って実行ログが取れるんですね。今まで実際どんなクエリが発行されているかわからず使っていたのでEF6使うしかない!と寒桜が咲きました。
f:id:sh_yoshida:20140208065441j:plain

概要

Visual Studio2010(以降VS)にNuGetパッケージマネージャーをインストールし、NuGetパッケージから最新のEF6をインストールします。ところが、、、

検証

セミナーPCはMicrosoft最新のWindows8.1にVS2013が載っています。こちらはデフォルトでNuGetパッケージが入っているのですが、VS2010には入っていないためNuGetパッケージマネージャをインストールします。
※NuGetですが講師の方は「ぬげっと」と発音していました。独学では読み方がわからない罠が多いです。

1.NuGetパッケージマネージャーのインストール

[ツール]-[拡張機能マネージャー]より左ペインのオンラインギャラリーを選択し「NuGet Package Manager」で検索します。
f:id:sh_yoshida:20140208070757p:plain
見つかったらダウンロードからのインストールを行います。
インストール時にセキュリティについて聞かれるので、問題ないよと許可してあげるとインストールされます(SS取り忘れ)。

VSを再起動するとNuGetが有効になります。

2.Entity Framework6のインストール

EFはMicrosoft製でテンプレートにも入っているのですがオープンソースなんですね。
NuGetパッケージマネージャーからEFを使うプロジェクトに対してインストールをする必要があるので、まずは対象のプロジェクトを開きます。
ソリューションエクスプローラーの参照設定よりコンテキストメニューを開くとNuGetパッケージの管理が追加されているのでこれを選択します。
f:id:sh_yoshida:20140208071824j:plain

「Entity Framework」を検索すると出てきました!
お目当ての一品です。
なんだかんだでインストールが成功すると緑のチェックマークがつきました。
f:id:sh_yoshida:20140208072852p:plain

EFのバージョンを参照設定-オブジェクトブラウザより確認してみると反映されてそうです。
f:id:sh_yoshida:20140208073517j:plain

3.Entity Frameworkの実装

プロジェクトのコンテキストメニューより[追加]-[新しい項目]を選択し、テンプレートより「ADO.NET Entity Data Model」を追加します。

ここで問題が発生しました。
実行ログを取得するには以下のメソッドで取得できるのですが、、、

EDMEntities context = new EDMEntities();
context.Database.Log = x => { Console.WriteLine(x); };

VS2013で問題なく動いたコードが、VS2010ではインテリセンスすら効かない!
これは一体どうゆうこと!?

それぞれのオブジェクトコンテキストの定義を追ってみると、
VS2010のオブジェクトコンテキストはSystem.Data.Objects名前空間のObjectContextから、VS2013のオブジェクトコンテキストはSystem.Data.Entity名前空間のDbContextから派生されたものでした。
そこ変わっちゃうんだ。

一旦まとめ

Visual Studio2010でEntity Framework6を使うにはNuGetパッケージマネージャーをインストールし、NuGetパッケージマネージャーよりプロジェクトごとにEntity Frameworkをインストールします。
ただし、テンプレートよりEntity Data Modelを作成するとEntity Framework6では作ってもらえない(まぁそうですよね)。

じゃあ、どうするかというお話ですがまだ深く調べてません(・∀・)
現時点ではEFの特徴であるCode firstで書いたら動いたよ!程度です。
でも、それはまた次回にします。

結果

(私はまだ)使えてない!
きっと使えるはずさ~