1

EF のエンティティのマッピングをカスタムしたい

たとえば、次のエンティティがあります。

public class User
{  
    public int UserId { get;set;}
    public string Firstname { get;set;}
    public string ColA {get; set;}
    public string ColB {get; set;}
}

一般的に使用されている EF では、既に OnModelCreating() にマッピングが追加されています。2 つの別個のアセンブリに 2 つの関数がある場合、AssemblyA.dll と AssemblyB.dll を呼び出すと、MEF フレームワークによって動的に読み込まれます。

AssemblyA.dll は ColA のみを必要とし、ColB を削除する必要があり、AssemblyB.dll についてはその逆を行う必要があるため、これら 2 つのサービスに対して 2 つの新しいマッピング クラスを定義する必要があり、アセンブリに従って列を削除するために動的に実行されます (AssemblyA は ColB を無視し、 AssemblyB は ColA を無視します)。現在の EF は既に運用されているため、コードを変更したくありません。各アセンブリのすべての変更は、独自のものにする必要があります。

EF は、このようなことをサポートしてくれますか? または、方向性を教えてください。

4

1 に答える 1

0

あなたがやろうとしていることはあまり明確ではありませんが、

  • すべての EF コンテキストは、各テーブルとエンティティを 1 回だけマップできます
  • AssemblyA の構成を読み込むと、AssemblyB の構成を使用できないことを意味します。
  • また、EF マッピングが内部で構築されるデフォルトの方法を使用できないことも意味します。これはOnModelCreating、そのメソッドは通常、アプリケーションの有効期間全体で 1 回だけ呼び出されるためです。
  • 手動で 2 つのDbModelinsnaces を構築し、それらをコンパイルしDbCompiledModelてコンストラクターに渡すことDbContextができます。これにより、AssemblyA と AssemblyB に対して 2 つの異なるマッピング構成を使用できるようになりますが、両方を同じコンテキスト インスタンスに含めることはできません。
  • EF の移行は、データベースごとに 1 つのマッピング セットが想定されているため、おそらく機能しません。

とにかく、MEF とモジュラー アーキテクチャを使用している場合、各エンティティはコア (特定のモジュールに関連せず、モジュール間でそのまま共有される) またはモジュール (他のモジュールやコアでは使用されない) のいずれかである必要があります。

于 2012-02-17T10:29:16.510 に答える