まだ生きているようです

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- : スポンサー広告 :
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
コメントの投稿
非公開コメント

Pagetop
« next  ホーム  prev »

カレンダー

プルダウン 降順 昇順 年別

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