基本クラスと2つの派生クラスがあります。
派生クラスのそれぞれは、プロパティと同じタイプを実装します。唯一の違いは、プロパティ名です。
残念ながら、クラスの設計にはあまり影響しません->wsdlファイルから生成されています。
次に、BaseTypeに、共通のプロパティをカプセル化するためのプロパティがあります。計画は、このプロパティを私のWebビューなどで使用することでした。
私はこの問題を実証するために有名な「果物の例」を使用しました。
public class FruitBase
{
public virtual int ID { get; set; }
//
// The plan is to use this property in mvc view
//
[NotMapped]
public virtual FruitnessFactor Fruitness
{
get
{
if (this.GetType().BaseType == typeof(Apple))
return ((Apple)this).AppleFruitness;
else if (this.GetType().BaseType == typeof(Orange))
return ((Orange)this).OrangeFruitness;
else
return null;
}
}
}
public class FruitnessFactor { }
私のMVCコントローラーでは、次のクエリは完全に正常に機能します。
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.ToList());
しかし、これはそうではありません:
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.OfType<Orange>().Include(o => o.OrangeFruitness)
.ToList());
私が受け取るエラーメッセージは次のとおりです。
DbOfTypeExpressionには、type引数と互換性のある多態的な結果型を持つ式引数が必要です。
私はEF5.0RCとCodeFirstアプローチを使用しています。
どんな助けでも大歓迎です!