Azureはじめました

Windows Azureで業務システムを組んでみる日記

EntityFrameworkのコードファーストで悩む

EFを使おうってのは確定してるんだが、その開発運用について悩む。
EFの定義をDBドリブンにするかコードドリブンにするかってあたりで。

DBドリブンにする場合、

  1. いつもどおりDBでテーブル設計
  2. VisualStudioADO.net Entity Data Model(.edmx)を作成してUpdate From Databaseする
  3. 関連なんかを適当に設定
  4. ビルド

という流れでいけるんだけど、この場合Migrationが使えない(?)のでAzureにUPしたときに自動的にデータベースをUpdate Schemaしてくれん。…と思う。

あとEntityにData Annotation設定してValidatingとかも簡略化したいんだが、クラス実装がedmx内に隠蔽されるのがきつい。
(edmxのDesigner.csに定義はあるんだけどそこ更新してupdate from databaseで上書きされたりすると泣ける)

Timestampアノテーションでの更新チェックについてもedmxでやる方法あるんだろうか。


じゃあコードファーストでやろうと思ってはいたんだが、

  • モデル間のリレーションがForeign Keyにされる。単なる参照だからそこまでいらんのに。
  • Poco側にインデックスを定義できない。
  • ローカルDBの挙動が謎い。SQLServer Management Studioでつなぐのは出来るのにDropDatabaseなんかがバンバンエラーになる。
  • add-migration するとロールバックできない?
  • 一旦データベースを破棄して新規にaddmigrationしようとしてもその手段が見当たらない。
  • ('A`)もうぬるぽ

よく考えたら

AzureStorageでのキャッシングを考えた時リレーションってシリアライズの邪魔になることを考えたら基本的にEntityでのリレーションって考えないほうが良いのかもしれない。