まだ生きているようです

スポンサーサイト

上記の広告は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

Tech Fielders セミナーに参加しました

10/1行われた、『 知ろう!学ぼう! ASP.NET MVC ~ 最新 Web 開発フレームワークの全体像 ~ 』に参加しました。講師は井上章さんでした。

 

転職後初めてのTFセミナー参加だったのですが、僕がやっていたころから少々変わっていて、時間が18:45スタートになっていました。参加しやすい時間帯で本当にありがたいです。

 

ちなみに、これまでTFセミナーが、なぜ13:00ぐらいからのスタートだったかと言うと、TFの活動は、MSの技術や製品をインフルエンスしてくれる人を探すこと大きな目的だったからです。(もちろん、それだけではありませんけどね)

そこで、懇親会やライトニングトークを交えた、複合的でインタラクティブなコミニュケーションの場を作っていたわけです。

現状がどうなっているのか?はもう僕にはわかりませんが、夜のセミナーなら、参加者も多く見込めますし、勉強する側からはうれしいです。(この日は、見たことのないぐらいの参加者人数でした。)

 

井上さんのMVCの話は、もう何回目だろう?と言うぐらい聞いているのですが、何度聞いてもわかりやすいですし、デモも綺麗でソツがないし、これが無料で聞けるというのは、井上さんありがとう!と言うしかないです(いや真面目にですよ)

IE9のVideoタグのデモも見れましたし、いつものEdtterも可愛かったです。もう完全に井上さんファンですねぇ。

 

自分的には、資料のAppendixの内容が聞きたくて、終了後、質問をしようと思ったら、井上さんに近づくこともできないぐらいQAの人だかりになっていました。やはり、この分野はみなさん仕事に直結していますし、そうなりますよね。

MVCは自分もあまりキャッチアップできていないので、これを機会に勉強しなければならないと危機感を感じましたよ。

 

ちなみに、TechFieldersセミナーは以下から登録できます。

http://www.microsoft.com/japan/powerpro/TF/seminar.mspx

 

そのうちLTなんかにも出てみようかな?と思ったり。

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

tag : 日記

2010-10-03 : 日記 : コメント : 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
ホーム

カレンダー

プルダウン 降順 昇順 年別

09月 | 2010年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ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。