まだ生きているようです

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- : スポンサー広告 :
Pagetop

Entity Frameworkの開発チームが色々やっているみたい

この記事なんですけど、、、デザイナを改善しているみたいです。
Entity Designer Improvements Preview

例えば、下図のような色分けとか。

20101012_EF1.jpg

個人的に、目を引いたのは下のスクリーンショット。
スカラプロパティの並び順の変更が出来るという機能の説明なのですが、コンテキストメニューに機能がいくつか追加されてるのが分かります(笑)
20101012_EF2.jpg

例えば、Enabled OData Supportとか、気になりますねー
(EDMの段階でWeb Friendly Feedの項目でも指定できるのでしょうか?)
まぁそれもいいですけど、他にも色々改善してほしい事がありますよね。

この辺で述べられていますが、将来的な機能について投票が可能になっています。
The EF Team Wants to Hear from You!

ちなみに僕は「Supported SQL Logging」に投票してみました。

スポンサーサイト

テーマ : なんとなく書きたいこと。。
ジャンル : 日記

tag : EntityFramework

2010-10-12 : EntityFramework : コメント : 0 : トラックバック : 0
Pagetop

EntityFramework:Model Firstのカスタマイズ

Model Firstで作成されるDDLスクリプトは 以下を使用して作成されます。
・T4 Template
・カスタムワークフロー
T4 TemplateはDDL スクリプトの元ネタになっていて、カスタムワークフローはCSDL⇒SSDL⇒MSL⇒DDL等の処理制御フローです。

 

これらのファイルの場所は、64bitOSの場合以下になります。
C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\DBGen

 

そして、それぞれファイル名が、
T4 Template: SSDLToSQL10.tt
カスタムワークフロー: TablePerTypeStrategy.xaml

となります。

 

これらをカスタマイズすることで、生成されるDDLスクリプトに対して細かい制御を行うことが可能です。例えば、timestamp型を使用して楽観同時実行制御をおこないたい場合、そのままではできませんので、T4 Templateの中を修正する形になります。

 

以下にその手順を紹介します。

まず、EDMの該当するエンティティクラスにスカラプロパティを追加します。

以下のようなプロパティをセットしておきます。
型:Binary
同時実行モード:Fixed
Null許容:False
StoreGeneratedPattern:Computed

 

次にテンプレートファイル(SSDLToSQL10.tt)を修正するのですが、直接するのは抵抗があるので、適当な名前でコピーして、そのファイルを編集しましょう。

151行目付近の以下の記述を修正します。

[<#=Id(prop.Name)#>] <#=prop.ToStoreType()#> <#=WriteIdentity(prop, targetVersion)#> <#=WriteNullable(prop.Nullable)#><#=(p < entitySet.ElementType.Properties.Count - 1) ? "," : ""#>

[<#=Id(prop.Name)#>] <#if (string.Compare(prop.Name,"TimeStamp",true) == 0) { #>timestamp<# } else { #><#=prop.ToStoreType()#><# } #> <#=WriteIdentity(prop, targetVersion)#> <#=WriteNullable(prop.Nullable)#><#=(p < entitySet.ElementType.Properties.Count - 1) ? "," : ""#>

 

後は、EDMのプロパティを編集するだけです。

DDL生成テンプレートをコピーしたファイルにして・・・(下図のファイル名はやる気が感じられませんね(笑))

20101002_EF10

 

最後に、EDMデザイナ上で右クリックして、[モデルからデータベースを生成]を行うと、めでたくtimestamp型のフィールドができているはずです。

 

所詮T4 Templateなので、ガッツリ弄ってしまって、その時のプロジェクトの状況に合わせてしまうのがいいでしょうね。

テーマ : プログラミング
ジャンル : コンピュータ

tag : EntityFramework

2010-10-02 : EntityFramework : コメント : 0 : トラックバック : 0
Pagetop

EntityFramework:いろいろなマッピングの例3

今回は多対多表現です。これも結構情報は出ていますので、簡単に書いてみます。

 

9/25にお話した例は、インストラクターエンティティと、授業エンティティが存在していて、インストラクターは複数の授業を担当することを表現したい場合の話でした。

その場合、テーブルは以下のような形になるかと思います。

20101002_EF7

中間テーブルである、CourseInstructorを通じて、1対多関係でリレーションを表現します。

 

これをEDMの概念モデルで表現すると以下のように表すことが可能です。

20101002_EF8

概念モデルの表現として、CourseInstructorテーブルはエンティティではなくて、アソシエーションにすることが可能です。(DataBase Firstの場合は、自動的に上記の形になります)

エンティティにするか、アソシエーションにするかは結構議論の分かれるところですが、上記の場合は、コードは以下のように書きます。

using (SchoolEntities db = new SchoolEntities())

{

    var query = from c in db.Courses

                      from p in c.People

                      where p.FirstName == "Roger"

                      select c;

    foreach (var q in query)

    {

        Console.WriteLine(q.Title);

    }

}

fromが2回連続で出てきますので、ちょっと気持ち悪い感じがするかもしれません。

図にすると、以下のようなイメージになります。

 

20101002_EF9

2回選択している雰囲気が伝わるでしょうか?

この手のクエリはLINQであれば、LINQ to XMLなんかで使用されることが多いですよね。

このシリーズ書いていて思いますが、セッションで話したことをもう一度書くのは、結構苦痛です(笑)

tag : EntityFramework

2010-10-02 : EntityFramework : コメント : 0 : トラックバック : 0
Pagetop

EntityFramework:いろいろなマッピングの例2

今回は継承について紹介します。

Entity Data Modelでは、以下2種類の継承が可能です。
・Table-Per-Type (TPT)
・Table-Per-Hierarchy (TPH)

継承を使用すると、概念モデルをよりオブジェクト指向的に定義する事が可能になりますが、エンティティとテーブルスキーマの考え方が別物になるなど、当然トレードオフがあるので注意が必要です。

・Table-Per-Type (TPT)
エンティティにマップされる、別個のテーブルを使用して、非継承プロパティと継承階層のそれぞれの型のキー、プロパティのデータを維持する方法です。と書いても意味が分かりにくいので下図をご確認下さい。

20101002_EF1.jpg

・Table-Per-Hierarchy (TPH)
1 つの テーブルを使用して、継承階層のすべてのエンティティ型のデータを維持する方法です。単一テーブル継承とも呼ばれます。こちらも下図をご確認ください。

20101002_EF2.jpg

TPHを実現するには、多少の手順が必要になります。

例えば、DataBase Firstで以下のようなエンティティが出来上がったとします。
20101002_EF3.jpg
このエンティティは、Employeesテーブルがもとになっていて、ユースケースとして、Employeeのほかに、OperatorとAdministratorと言うアクターが存在し、Employeesテーブルに一緒に保存されている状況です。

そこで、OperatorエンティティとAdministratorエンティティを作成します。(親のエンティティはemployeeにします)

20101002_EF4.jpg

次に、Operator(Administrator)にしかない情報(スカラプロパティ)を親のemployeesから切り取り⇒貼り付けを行います。
また、employeeFlgも削除してしまいます。その結果以下のようになります。

20101002_EF5.jpg

employeeFlgが0の場合はemployee、1の場合はOperator、2の場合はAdministratorというルールを実現したいので、マッピングの詳細をそれぞれ3つのエンティティクラス上で行います。(下図はAdministratorのマッピングです)
20101002_EF6.jpg

これでEDMの作成は終了です。

コードは以下のようになります。(このコードは、TPT、TPH双方で使用することが可能です。)
この例は、Employee1人、Operator1人、Administrator1人を追加して、Operatorを全員抽出しています。
using (Demo2Entities db = new Demo2Entities())
{
     employee newEmployee = new employee();
     newEmployee.ID = 11;
     newEmployee.Name = "社員1";
     db.employees.AddObject(newEmployee);

     Operator newOperator = new Operator();
     newOperator.ID = 502;
     newOperator.Name = "オペレーター1";
     newOperator.Ope_Desc = "オペレーター用の備考";
     db.employees.AddObject(newOperator);

     Administrator newAdministrator = new Administrator();
     newAdministrator.ID = 302;
     newAdministrator.Name = "管理者1";
     newAdministrator.Admin_Desc = "管理者用の備考";
     db.employees.AddObject(newAdministrator);

     db.SaveChanges();

      var query = from o in db.employees.OfType<employee>()
                          select o;

     foreach (var q in query)
     {
          Console.WriteLine(q.Name);
     }
}

ちなみに、Model First での継承は、必然的にTPTになるはずです。
(ただし、TPHが絶対不可能なわけではありません)
また、Database First での継承は、テーブルスキーマーによってTPTとTPHを使い分けることになります。
ただ、TPHは実テーブルスキーマから乖離するので注意が必要ですね。


テーマ : プログラミング
ジャンル : コンピュータ

tag : EntityFramework

2010-10-02 : EntityFramework : コメント : 0 : トラックバック : 0
Pagetop

セッション資料が公開されました

9/25にお話した資料が公開されました。

こんなタイトルと概要です。
「Entity Framework開発のTips集」
「Entity Frameworkはなんとなく分かっています」と言う人を対象に、概要から少し踏み込んだ内容をお話します。と言っても、内部の複雑なアーキテクチャなどではなく、EFが出来る事で、これまであまり話されてこなかった内容をお届けしたいと思います。

ご興味のある方はこちらから。

フォロー記事も随時書いていきますね。


テーマ : 独り言
ジャンル : 日記

tag : EntityFramework お知らせ

2010-09-30 : お知らせ : コメント : 0 : トラックバック : 0
Pagetop
ホーム  次のページ »

カレンダー

プルダウン 降順 昇順 年別

09月 | 2017年10月 | 11月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 - - - -


カテゴリ

openclose

タグクラウドとサーチ

メールフォーム

名前:
メール:
件名:
本文:

プロフィール

こだかたろう

元MSの小高と申します。
(↓こんな人です。)
こんな見た目です

ずっとエバンジェリストをしていましたが、この度転身いたしました。
よろしくどうぞ。

Select Template

RSSリンクの表示

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。