現在作成しているアプリケーションは、ストアドプロシージャと手作りのクラスモデルを使用してデータベースオブジェクトを表しています。 Entity Frameworkの使用を提案している人もいますが、私はプロジェクトにそれほど深く関わっていないため、それに切り替えることを検討しています。私の問題は、EFを主張する人々が私に物事の良い面だけを言っており、悪い面ではないと感じていることです:)
私の主な懸念は:
EFの引数は次のとおりです。
現在のアーキテクチャは、パラメーター化されたストアドプロシージャを介してデータベースコールを処理するWPFサービス、WCFサービスとWPFクライアントとの間でやり取りされるPOCOオブジェクト、およびPOCOを検証とデータバインディング。
だから私の質問は、EFはこれに適していますか?私が知らないEFに関する落とし穴はありますか?
私は最近Entity Frameworkを評価していて、問題や不足している機能について私が見つけた最良の場所は http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions
最も投票数の多いアイテム:
ユーザーボイスのリストにはさらに多くの問題があります。
余談ですが、コードファーストアプローチを含むEF 4.1の次期リリースにかなり興奮しています... http://blogs.msdn.com/b/adonet/archive/2011/03/15 /ef-4-1-release-candidate-available.aspx
これは実際に、運用アプリケーションでEFを試すように私に要求する場合があります。
ブランチごとのブランチ/機能をEFで実行すると、マージ時に非常に苦痛になる可能性があります。 2つのブランチAとBがデータベースに変更を加えると想像してください(これは、おそらく新しいプロジェクトの初期段階で頻繁に発生します)。
すべての「通常の」ファイル(csファイルなど)をマージします。次に、Model.edmxをマージします。そして突然、オブジェクトモデルとデータベースの間の論理マッピングだけでなく、エンティティダイアグラム内のテーブルの位置もマージするようになります。
Model.edmxのマージは非常に骨が折れるので、かなり厄介なWay That Worksを採用しました。
EFには他にもいくつかのメリットがあります。
欠点(特に検証を使用している場合):
object
タイプであるため、メタデータを読み取るためだけに存在します。まだ多くの余分な非アクティブなコード。それらは私が持っている2つの最大の不満です。いくつかの利点がありますが、NHibernateから同じ利点を得ることができるかもしれません。 EntityFrameworkがテーブルにある場合は、チームにNHibernateもチェックしてもらい、yourプロジェクトの賛成/反対を簡単に確認してもらいます。
メタデータクラスの問題は頭痛の種ですが、ありがたいことに、検証タグを必要とするエンティティが非常に多くあります。
オブジェクトに真の分離モードがないと、Web環境で実行できることが制限されます。アタッチドモードは、デスクトップアプリケーションに適しています。デスクトップアプリケーションは、多くのMicrosoftの革新が生まれた場所です。分離モードは可能ですが、非常に苦痛です。この場合、代替ツールを使用するのが最善です。
マイクロソフトが得意ではないことの1つは、後退です。 比較可能性互換性、特に新しいテクノロジーに関しては
具体的には、EF1(.net 3.5)はEF4(.net 4.0)と大きく異なります。次のバージョンでも同じことが起こる可能性があります。
私はしばらく待って、テクノロジーがどのように成熟するかを確認します。
当面は、nHibernateの使用を検討してください。同等ではありませんが、成熟しており、幅広く使用されています。
私は10ページのダイアトリブを書くことができました。しかし、X社の使い捨てアプリを作成しているだけなら、その人は気にかけてくれます。しかし、もしあなたがソフトウェア製品を開発しているなら...あなたはもっともっとアナルになる必要があるでしょう
これをチェックしてください: http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/
主なポイントは次のとおりです。
上記のリンクはEF1について話していることに注意してください。
また、このリンク: http://ormeter.net/ は、パフォーマンスおよびLINQサポートにおいて、EFが他のORMと比較して最良ではないことを示しています。