3

コア製品スイート (データベースからインポートされたエンティティ) で使用される最大 300 のエンティティを含む EF4 EDMX があります。

私たちが新しいクライアントを獲得するとき、多くの場合、彼らは追加の情報を保存し、私たちのビジネス ドメイン外で完全にカスタム化されたカスタム プロセスを開発することを望んでいます。たとえば、あるセキュリティ会社と契約を結びました。彼らは、自社のセキュリティ レベルに関する情報を保存し、これらのレベルで動作するプロセスを持ちたいと考えていました。

いずれの場合も、カスタム テーブルを追加する必要があります。AND/OR カスタム フィールドを既存のエンティティに追加します。コア クラス ライブラリがカスタム テーブルなどでジャンクされていない以前の技術でこれを行う良い方法がありました。カスタム クラス ライブラリのコア エンティティ (EF の EntityObject に相当) から継承し、必要に応じてカスタマイズを追加するだけでした。

同様に、これらのカスタム テーブルと属性をコア EDMX に追加したくありません。基本的に、カスタマイズを追加できる別のクラス ライブラリの新しいカスタム EDMX でコア EDMX から「継承」したいと考えています。継承により、Core EDMX でできることすべてに加えて、もう少し多くのことを行うことができます。

t4 テンプレートを使用して、このブログ投稿に基づいてリポジトリを生成しています (モデル優先のアプローチは使用していません)。

http://geekswithblogs.net/danemorgridge/archive/2010/06/28/entity-framework-repository-amp-unit-of-work-t4-template-on.aspx

必要に応じて EDMX を拡張できますか?

以下のように、個別の EDMX でカスタム エンティティを返す、コア エンティティのメソッド拡張という 1 つのハックなソリューションを思いつきました。

  public static class CoreEntityExtensions
  {
    public static EntityConnection EntityConnection;

    public static CustomUserEntity CustomUserDetails(this User coreUser)
    {
      ICustomUserEntityRepository customUserRepository = new CustomUserEntityRepository(EntityConnection);
      return customUserRepository.All().SingleOrDefault(u => u.id == coreUser.id);
    }
  }

ただし、いくつかの明白な理由から、これは理想的ではありません。

どんな助けでも大歓迎です。

4

1 に答える 1

0

あまり役に立たないと思いますが、NHibernateはそれを非常に簡単に行うことができます。私たちはあなたと同じシナリオを持っており、NHは問題なくDLL全体をモデル化することを可能にします。

申し訳ありませんが、実際には答えではありませんが、これを読んでいる他の人のための代替案を検討するためのアドバイスです。

于 2011-04-05T20:49:26.613 に答える