2

OR/M-API とストレージ/概念モデルのマッピング機能 (もちろん Linq と Entity SQL) が気に入ったので、Entity Framework を新しいプロジェクトに適用することを検討しています。

しかし、UI レイヤーとビジネス レイヤーの両方で EF エンティティがデータホルダーとして使用されている場合、UI レイヤーとビジネス レイヤーの間で疎結合を実現するにはどうすればよいでしょうか。エンティティが UI にあるときに ObjectContext にアタッチしたままにしておくと、UI がビジネス レイヤーをバイパスして、データベースに直接接続する可能性があります。エンティティを UI に渡す前に ObjectContext からデタッチすると、変更の追跡が行われないため、ビジネス レイヤーですべての変更を「再生」して、データベースに永続化する必要があります (特に達成が困難です)。親子関係)。ビジネス レイヤーが「オブジェクト ツリーの永続化エンジン」に劣化することは望ましくありませんが、この機能が役立つシナリオもあります。

これは確かに他の OR マッパーにも当てはまりますが、いくつかの代替製品は、より優れたデタッチ/アタッチ メカニズムを備えているようです。

4

4 に答える 4

4

変更を「再生」するのは、思ったより簡単です。必要な作業の概要は次のとおりです。

  1. デタッチして UI に渡す前に、エンティティ インスタンスの「元の」バージョンを保存します。
  2. UI に任せましょう。
  3. UI によって行われた変更をデータベースに保持する場合は、保存した元のバージョンを取得し、それを EntityContext にアタッチします。UI によって返された変更されたバージョンからの変更をこのインスタンスに適用します。今SaveChanges。Entity Framework が 3 者間マージを処理します。
于 2008-09-18T13:40:11.577 に答える
3

プラットフォームに依存しない n 層ソリューションを適切に処理する ORM を私は知りません。EF は、すべてが ObjectContext 内で行われている場合にうまく機能します。n 層のソリューション (物理的な分離、WCF/XML Web サービスの呼び出し) がある場合は、オブジェクトが正しく動作するように配管を行う必要があります。

リポジトリ パターンを使用して Ef の API 依存関係を分離することで、疎結合を実現できます ( http://blog.keithpatton.com/2008/05/29/Polymorphic+Repository+For+ADONet+Entity+Framework.aspx ) 。 . ただし、UI レイヤー内で EF クラスを直接使用している場合は、純粋な C# クラス (POCO) で EF を動作させる世界を掘り下げることにしない限り、EntityReference、EntityKey、EntityObject などの特定の型に依存します。それは私にとって価値があるよりも面倒に思えます。

于 2008-10-07T06:46:08.367 に答える
0

ADO.NetチームのDanielSimmonsは、変更されたオブジェクトをアタッチするための拡張メソッド「AttachAsModified」を提供しました。

これは変更を再生するほど賢くはありませんが、それはそれを可能にします:私はそれをサンプルプロジェクトに使用しています。

于 2009-01-06T02:20:38.067 に答える
-1

Google の「エンティティ フレームワーク」と「不信任投票」を行って、何が得られるかを確認してください。

于 2008-09-17T13:38:52.633 に答える