データセット全体を上下に渡すことを本当に考えていますか? リポジトリ パターンを実装できると思いますが、これはオブジェクト モデルを破壊し、維持するのがより困難になります。それでも、変更を送信するだけでも、スキーマを転送しないようにしたり、おそらく圧縮オプションを使用したりするなど、奇妙なことを行う必要があります。しかし、別のアセンブリにクリーンな POCO があり、EF インフラストラクチャが DTO を汚染していない Entity Framework Code First と比較すると、これは非常に悪い選択です。
EF 自体がオーバーヘッドを追加することはありませんが、実装方法と渡されるデータ オブジェクトによって異なります。SaveChanges
データをコンテキストに渡し、などの呼び出し時に正しいオプションを使用するとSaveChangesOptions.ReplaceOnUpdate
、変更されたエンティティのみが更新されます。実行されるクエリは、必要のないものを遅延ロードしないように注意している限り、効率的です。エンティティへの LINQ をよく理解し、コストがかかる可能性のある他のメソッド呼び出しと同じように、更新をバッチ処理する必要があります。データベース プロファイラーを実行していくつかのテストを実行し、EF とのやり取りの効率を向上させたり、IIS ログのデータ サイズや送信時間などを監視したりします。
スキーマをカプセル化する必要があるため、データセットは軽量とは見なされず、誰かが間違いを犯して、依存関係にあるテーブルを含む複数のテーブルにデータのヒープ全体を送信する可能性があります。これらは、クライアントまたはサーバーのいずれかでとにかくプルする必要がある場合があります-非常に面倒です! EF は、ストアド プロシージャをモデルの一部にすることができ、特定のエンティティを保存する必要があるときに呼び出されるため、賢明な方法でストアド プロシージャをサポートします。ORM は OO 設計を補完し、よりクリーンなコードに導きます。
また、何か単純なことを行っていて、ビジネス ロジックをあまり必要とせずに CRUD のみを必要とする場合は、WCF Data Services を検討してください。