web-dev-qa-db-ja.com

EntityFrameworkを使用した場合のいくつかの引数は何ですか?

現在作成しているアプリケーションは、ストアドプロシージャと手作りのクラスモデルを使用してデータベースオブジェクトを表しています。 Entity Frameworkの使用を提案している人もいますが、私はプロジェクトにそれほど深く関わっていないため、それに切り替えることを検討しています。私の問題は、EFを主張する人々が私に物事の良い面だけを言っており、悪い面ではないと感じていることです:)

私の主な懸念は:

  • DataAnnotationsを使用したクライアント側の検証が必要です。とにかくクライアント側のモデルを作成する必要があるようです。そのため、EFがコーディング時間を大幅に節約できるかどうかはわかりません。
  • ネットワークを経由するときは、クラスをできるだけ小さくしたいと思います。EFを使用すると、不要な余分なデータが含まれることが多いことを確認しました
  • 複数のデータベースにまたがる複雑なデータベースレイヤーがあり、EFがこれを処理できるかどうかはわかりません。 Users、StatusCodes、Typesなどの1つの共通データベースと、アプリケーションの異なるインスタンス用のメインデータベースの複数のインスタンスがあります。 SELECTクエリは、データベースのすべてのインスタンスに対してクエリを実行できますが、ユーザーが変更できるのは、現在作業中のデータベースにあるオブジェクトのみです。アプリケーションをリロードせずにデータベースを切り替えることができます。
  • オブジェクトモードは非常に複雑で、多くの場合、関与する結合がかなりあります

EFの引数は次のとおりです。

  • 並行性。保存する前にレコードが更新されたかどうかをチェックするコードを記述する必要はありません。
  • コード生成。 EFは私のために部分クラスモデルとPOCOを生成できますが、検証用のクライアント側モデルといくつかのカスタム解析メソッドを作成する必要があると思うので、これは本当に多くの時間を節約できるとは思いません。
  • すべてのデータベースオブジェクトに対してCRUDストアドプロシージャを作成する必要がないため、開発速度

現在のアーキテクチャは、パラメーター化されたストアドプロシージャを介してデータベースコールを処理するWPFサービス、WCFサービスとWPFクライアントとの間でやり取りされるPOCOオブジェクト、およびPOCOを検証とデータバインディング。

だから私の質問は、EFはこれに適していますか?私が知らないEFに関する落とし穴はありますか?

31
Rachel

私は最近Entity Frameworkを評価していて、問題や不足している機能について私が見つけた最良の場所は http://data.uservoice.com/forums/72025-ado-net-entity-framework-ef-feature-suggestions

最も投票数の多いアイテム:

  1. 列挙型のサポート。これはかなり大きいですが、現在いくつかの回避策があります
  2. SQL生成の改善。特にエンタープライズレベルのアプリケーションでは速度が非常に重要ですが、EF4では大幅に改善されたようです。
  3. 複数のデータベースのサポート。大規模アプリケーションの要件。

ユーザーボイスのリストにはさらに多くの問題があります。

余談ですが、コードファーストアプローチを含むEF 4.1の次期リリースにかなり興奮しています... http://blogs.msdn.com/b/adonet/archive/2011/03/15 /ef-4-1-release-candidate-available.aspx

これは実際に、運用アプリケーションでEFを試すように私に要求する場合があります。

7
Mag20

ブランチごとのブランチ/機能をEFで実行すると、マージ時に非常に苦痛になる可能性があります。 2つのブランチAとBがデータベースに変更を加えると想像してください(これは、おそらく新しいプロジェクトの初期段階で頻繁に発生します)。

すべての「通常の」ファイル(csファイルなど)をマージします。次に、Model.edmxをマージします。そして突然、オブジェクトモデルとデータベースの間の論理マッピングだけでなく、エンティティダイアグラム内のテーブルの位置もマージするようになります。

Model.edmxのマージは非常に骨が折れるので、かなり厄介なWay That Worksを採用しました。

  • マージ中に、1つの親からすべてのマージを選択するだけです。どちらでもかまいません。とにかくすぐにファイルをトーストします。
  • Model.edmxをいずれかの親に戻します。
  • データベースを新しいマージ済み状態に移行します。
  • Model.edmxを開き、「データベースからモデルを更新」します。
  • マージ中にトーストされたすべてのナビゲーションプロパティの名前を変更します。
7
Frank Shearar

EFには他にもいくつかのメリットがあります。

  • エンティティスパンテーブルを持つことができます
  • テーブルをさまざまなタイプのエンティティに分割できます
  • データベースからエンティティを生成できます(つまり、マスターアプローチとしてのデータベース)
  • エンティティからデータベースを生成できます(つまり、マスターアプローチとしてのコード)
  • LINQクエリはSQLクエリに変換され、パフォーマンスが向上します。

欠点(特に検証を使用している場合):

  • 適切な検証属性で検証するプロパティを持つ別のクラスを指す[MetadataClass]属性を作成する必要があります。すべてのプロパティはobjectタイプであるため、メタデータを読み取るためだけに存在します。まだ多くの余分な非アクティブなコード。
  • EntityFrameworkの使用は、NHibernate(および親のJavaバージョンも同様))が機能するように設計されている方法とは異なる概念です。EntityFrameworkはattachedモードで最適に機能します。オブジェクトは常にライブ接続を使用していますNHibernateおよび類似のORMツールは、データのロード/保存時にのみ接続が使用されるdetachedモードで最適に動作します。

それらは私が持っている2つの最大の不満です。いくつかの利点がありますが、NHibernateから同じ利点を得ることができるかもしれません。 EntityFrameworkがテーブルにある場合は、チームにNHibernateもチェックしてもらい、yourプロジェクトの賛成/反対を簡単に確認してもらいます。

メタデータクラスの問題は頭痛の種ですが、ありがたいことに、検証タグを必要とするエンティティが非常に多くあります。

オブジェクトに真の分離モードがないと、Web環境で実行できることが制限されます。アタッチドモードは、デスクトップアプリケーションに適しています。デスクトップアプリケーションは、多くのMicrosoftの革新が生まれた場所です。分離モードは可能ですが、非常に苦痛です。この場合、代替ツールを使用するのが最善です。

5
Berin Loritsch

マイクロソフトが得意ではないことの1つは、後退です。 比較可能性互換性、特に新しいテクノロジーに関しては

具体的には、EF1(.net 3.5)はEF4(.net 4.0)と大きく異なります。次のバージョンでも同じことが起こる可能性があります。

私はしばらく待って、テクノロジーがどのように成熟するかを確認します。

当面は、nHibernateの使用を検討してください。同等ではありませんが、成熟しており、幅広く使用されています。

2
Ophir Yoktan
  • 単に...ドメインモデルがデータベースのリレーショナルモデルのレプリカになることはめったにありません。したがって、いくつかのテーブルをクラスにマッピングし、それをネットワーク経由で投げるのは、単なる怠惰です。データベースが3つの異なるテーブルであっても、テーブルはローカルで1つのオブジェクトにマッピングされる場合があります。データベースをインテリジェントに設計します。
  • 2つ目は、このEFスタッフは特定のクエリを生成できないため、とにかくそれらを記述する必要があります。
  • 3番目のドメインモデルはサービスに直接マッピングされません。特に、モバイルアプリと通信する場合は、最小限のデータセットをDTOとしてネットワーク経由でプッシュするだけです。
  • 5番目のテスト機能...コードの変更に対して十分な回帰を提供する十分な粒度のテストを作成できない...すべてが簡単
    休憩...

私は10ページのダイアトリブを書くことができました。しかし、X社の使い捨てアプリを作成しているだけなら、その人は気にかけてくれます。しかし、もしあなたがソフトウェア製品を開発しているなら...あなたはもっともっとアナルになる必要があるでしょう

1
user104468

これをチェックしてください: http://efvote.wufoo.com/forms/ado-net-entity-framework-vote-of-no-confidence/

主なポイントは次のとおりです。

  • 遅延読み込みの欠如
  • 持続性の無知の欠如
  • エンティティモデルの保存に使用されるファイル形式には、視覚化要素とエンティティモデル自体の両方が含まれ、チーム環境でマージの問題が発生します。

上記のリンクはEF1について話していることに注意してください。

また、このリンク: http://ormeter.net/ は、パフォーマンスおよびLINQサポートにおいて、EFが他のORMと比較して最良ではないことを示しています。

0
M.Sameer