EntityFrameworkのコードファーストで悩む
EFを使おうってのは確定してるんだが、その開発運用について悩む。
EFの定義をDBドリブンにするかコードドリブンにするかってあたりで。
DBドリブンにする場合、
- いつもどおりDBでテーブル設計
- VisualStudioでADO.net Entity Data Model(.edmx)を作成してUpdate From Databaseする
- 関連なんかを適当に設定
- ビルド
という流れでいけるんだけど、この場合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でのリレーションって考えないほうが良いのかもしれない。
参考
- Code First DataAnnotations
- Entity Framework Fluent API - Relationships
- EF Migrations Command Reference | Passion for Coding
- Entity Framework Code First Migrations
- Entity Framework Code First Migrations
- Entity Framework 4 はじめてみました | ブチザッキ
- Entity Framework 4でコード・ファースト開発 - @IT
- Entity Framework 4“コード・ファースト”:独自のデータベース・スキーマ・マッピング - @IT