5

コードファーストのアプローチと、テーブルごとの階層で表されるビジネスオブジェクトの継承を使用して、Entity Framework 5.0 を使用しています。

次の構造にしたいと思います。

//Assembly 'DataAccess'    
public class MyDbContext : DbContext
{
    DbSet<AbstractClass> CommonObjects.AbstractClasses { get; set; }
}

//Assembly 'CommonObjects'  
public abstract class AbstractClass
{
    //implementation
}

//Assembly 'DerivedObjects'   
public class DerivedClass : AbstractClass
{
    //implementation
}

実行時に DbContext に初めてアクセスしようとすると、コンパイラは次のように InvalidOperationException をスローします。

抽象型 'CommonObjects.AbstractClass' にはマップされた子孫がないため、マップできません。モデルから「CommonObjects.AbstractClass」を削除するか、「CommonObjects.AbstractClass」から派生した 1 つ以上のタイプをモデルに追加してください。

このシナリオは可能ですか?はいの場合、何が間違っていますか?

事前にご回答いただきありがとうございます。

ベン

追加情報:

たぶん、もう少し具体的にする必要があります:

抽象的なビジネス オブジェクト (抽象化のみ) を含む 1 つのアセンブリを取得しました。具体的な実装 (ロジックを含む) は、そのロジックがそのアセンブリ内の他のクラスに依存するため、責任のあるアセンブリに保持されます。問題は、これらの具体的な実装を永続化レイヤーにも格納できるようにしたいということです。しかし、そのためには、マッピングを有効にするために EF がそれらの型を認識している必要がありました。しかし、永続化レイヤーをビジネスロジックレイヤーに依存させたくありません-抽象化のみです。

そのため、派生オブジェクトをビジネス オブジェクト レイヤーから直接 DbContext に追加しようとしました。

例:

AbstractClass derivedClass = new DerivedClass();
MyDbContext.AbstractClasses.Add(derivedClass); 

しかし、その後、上記の例外がスローされています。これを達成するための適切な構造がわかりません。

4

0 に答える 0