石野光仁 Blog

開発、C#、ASP.NET、アイライトの活動について、いろいろ


AILight Blogs

目次

Blog 利用状況

ニュース


Visual C# Since 2003

過去の記事

カテゴリ

イメージ ギャラリー

ブログロール

リンク

Entity Frameworkを調査 その2

さてと、仕事もひと段落したので、SQL Serverよりデータを取り出してみたいと思います。
早速、プロジェクトに、「ADO.NET Entity Data Model」を追加してみました。
ウィザードが表示され、
「データベースから生成」
「空のモデル」
とありますが、調査なので空のモデルを選択してみましょう。

Visual Studioよりファイルを開くと・・・

「Entity Data Modelデザイナーを使用すると、Entity Data Modelを表示してデザインできます。」
「新しいエンティティをモデルに作成するには、ツールボックスから項目をドラッグします。」

などと表示されています。
サーバーエクスプローラーから、テーブルをドラッグ&ドロップもできません。
ツールボックスから、エンティティを入れる事ができますが、私が目指している物とは
違いますね。 データベースからの生成が行いたいのです。

デザイナーで右クリック!!

データーベースからモデルを更新
モデルからデーターベースを生成

などという、魅力的なメニューを発見!!
早速、データーベースからモデルを生成してみましょう。

更新ウィザード画面が表示されました。 
ここの接続先は、サーバーエクスプローラーの接続先が表示されているみたいです。
また、「新しい接続」ボタンを押せば、ここでも新規に接続先を作成できます。
では 早速。

エンティティ接続文字列が作成されました。
metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string="Data Source=ServerName;Initial Catalog=DataBaseName;Integrated Security=True"

へぇ。今後はこれで管理して行くのですね。
残りはとりあえず、デフォルトで作成

次へ!!

ふむ。更新ウィザードはデータベースオブジェクトの選択などという画面が表示されました。
ここでは、テーブルやビューのオブジェクトを追加したり更新したり、削除したりするみたいです。
Linq to SQLでは、デザイナーからテーブルをオブジェクト削除して、テーブルを再ドラッグ&ドロップをしていたのですが、
Entity Frameworkでは、この更新ウィザードで管理するのですね。

メモメモ。 φ(..)

「生成されたオブジェクトの名前を複数化または単数かする」

どこかでこの話を聞いた気がするが、とりあえず忘れて。。。 デフォルトのままで完了します。
生成するデータベースは開発中の案件のDBを利用してみました。
テーブルとビューを全部選択して、、生成!!
(テーブル数150本ぐらいの規模)

ちょっと長めですが、しばらくすると完了しました。

ソースに追加されたファイルが、「Model1.edmx」 これが一番最初に追加したファイルで、
ダブルクリックすると、デザイナが開きます。
プロジェクトのPropertiesのDataSourcesに、Model1Conteiner.datasourceなんてファイルが
出来ちゃっています。

謎がまだ現れました。
さてと、調査してみますか。。。

まずは、Mode1.edmx
作りは、Linq to SQLと似ていますね。
Linq to SQLでは、DataContextから継承された、接続を関するクラスが生成されるのですが、
Entity Frameworkでは、ObjectContextから継承された、接続クラスが生成されています。(多分・・・だってまだ実行していないし)

その中には、プロパティが幾つかあって、
ObjectSet プロパティってリージョンがあります。
ObjectSet<>は、Linq to SQLで言う所のTable<>っぽいですね。

ふむふむ。

ということで、ObjectSetのクラス定義を見てみましょう。
public class ObjectSet : ObjectQuery, IObjectSet, IQueryable, IEnumerable, IQueryable, IEnumerable where TEntity : class

予想通りということと、 AddObjectやら、DeleteObjectなどがあります。
個人的な趣味から言うと、AddObjectってメソッドはくどいので後でラップしちゃうかも。。。
まぁ IQueryableもあるので、Table<>ですね。

AddToメソッドのregionがひどい・・・
コメント欄にに、非推奨のメソッドです。別のを使え と書いてあるのですが。
その通りで、きたない。。。

内容としては、テーブルにEntity一個をインサートするメソッドが、テーブル数生成されています。

うぅぅ。。。 互換の為にあるんでしょうね。 目が腐ります。 Addがあるのに、Deleteがないのも不満(何か違う?)
まぁ 見なかった事にしましょう。

おぉぉぉぉぉ 喜びましょう!! 良いものを見つけました。

次にテーブルのクラスがあるのですが、
Linq to SQL では、そのクラスの継承が、 INotifyPropertyChanging, INotifyPropertyChanged だけだったのですが、
今回はちゃんと、 EntityObject っていうクラスから継承されています。
これで、オブジェクトの特定が出来ますね。 よかった よかった (T_T)

で、一通り見渡した感じ、Linq to SQLをちょっと良くした感じのものになっていますね。

今日の電話当番が終わったので、この調査の続きは月曜日以降にします。
これは調べ甲斐があるかもしれませんね。
あっ、、、最初の目標であるデータが取り出せてないし・・・ それも月曜日以降ですね。

投稿日時 : 2010年5月22日 17:35

コメントを追加

No comments posted yet.
タイトル  
名前  
URL
コメント