コードのモダナイゼーション イニシアチブの一環として、Entity Framework を使用して自社開発の ORM を強化 (そして最終的には置き換える) 方法を見つけようとしています。ORM 自体は、前のステップであった単純な SQL 呼び出しから大きく前進していますが、インフラストラクチャの残りの部分が引き上げられたので、段階的に廃止を開始したいと考えています。
そのために、現在の ORM と同じように動作するように、Entity フレームワークを介してクラスを構築する方法を見つけようとしています。理想的には、クラスの再設計に必要なコードの変更はなく、遅延読み込みや、データベースに一致するクラスの生成/更新の容易さなどの機能が得られます。
現在の ORM は、事実上、SQL ステートメントを作成するための非常に洗練されたラッパーです。 Part p = new Part(12345);
が実行さselect * from parts where partID = 12345
れ、返された DataRow を取得し、リフレクションを使用してオブジェクトのフィールドに入力します。保存するときもほとんど同じことを行います。すべてのフィールドを取得し、それを使用してデータ行を更新し、それをデータベースに書き戻します。通常、編集されると予想される場合、データベース内の行もロックします。ちょっと不器用ですが、うまくいきます。
エンティティ フレームワークとテンプレートを使用して、永続的なデータ コンテキストを必要としない方法でクラスを自動的に生成する方法を見つけようとしています。現在の方法では、必要な場所にオブジェクトを作成し、必要に応じて渡すことができ、オブジェクトが更新されると、データベースがそのオブジェクトに一致するように更新されることがわかります。(タイトルのとおり) さまざまなことを調べましたが、オブジェクト ライブラリの外部でコンテキストが不要になるように、どの方法を使用できるかわかりません。
誰かが私を正しい方向に向けることができますか?
編集: 私はあまりにも多くを求めているか、四角いペグを丸い穴に押し込もうとしているのかもしれません. 私が探しているものを単純化して、最小限に抑えてみましょう。
これを構造化して、外部で有効なCRUDタイプのオブジェクトを作成しusing (var context = new Context()) {}
て、無関係なコードに渡すことができる方法はありますか? コンテキスト外で動作する限り、ロード/保存するためにコンテキストに戻す必要があるかどうかは気にしません。
EF を使用してこれが不可能な場合、このシナリオの正しい設計パターンは次のとおりです。1 つのフォームが別のフォームを開き、請求書を渡します。2 番目のフォームはその Invoice を取得し、ユーザーに支払いを入力してもらい、新しい Payment オブジェクトを生成します。最初のフォームはその Payment オブジェクトを受け取り、それに基づいて Invoice に対してさらに処理を行います。次に、すべてが一度にデータベースにコミットされます。