EntityFrameworkのモデルファースト利用について
既存システムに対して新たなサービスを構築する際にはモデルファーストでEntityFrameworkを利用することになる。
面倒なSQL文字列組立やマッピングの為のコードから解放されるが既存のモデルから単純に取り込むといろいろ弊害が起きる。
・エンティティがモデル上に反映されない
レコード識別のためのキーを自動的に判別するが、
複合キー
View
などEntityFramework的に認識できず、無視される場合がある。
・認識されたとしても、いざ更新しようとしても例外が発生して更新できない
PKが認識できない場合、読み取り専用扱いとなり更新処理で例外発生となる。
VisualStudio上のソリューションエクスプローラーでedmxファイルを右クリックしXMLエディターで見てみると
<!--生成中に見つかったエラー:
警告 6002: テーブル/ビュー 'XXXXXX' には主キーが定義されていません。主キーは推論され、定義は読み取り専用のテーブル/ビューとして作成されました。-->
などと書かれている。。。
プライマリキーを設定し忘れたみたいです。。
ちなみに今時のWebフレームワークはサロゲートキーが前提になってるみたいですね。
複合主キーとかあまり気にせず実務で使ってましたが、これからは何も考えず「ID」って主キーをつけることにします。
ナチュラルキーにユニーク制約つけとけばいいかな?
って思ったけど、ER図をリバース生成して設計書完成!ってやりたいときにIDだらけでわけわからん感じになりそう。。