私は基本クラスと2つの派生クラスを持っています。Entity Frameworkは派生クラスを照会しません - DbOfTypeExpressionのエラー
それぞれの派生クラスは、プロパティと同じ型を実装しています。唯一の違いはプロパティ名です。
悲しいことに、悲しいことに、私はクラスデザインに大きな影響を与えません - >それらはwsdlファイルから生成されています。
次に、共通プロパティをカプセル化するためのBaseTypeプロパティを持っています。 、次のクエリは絶対に正常に動作します私のMVCコントローラで
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 { }
:計画は、私は、問題を示すために、有名な「フルーツ-例」を使用している
など私のWebビューで、このプロパティを使用していました:
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引数と互換性のある多型の結果の型を持つ式の引数が必要です。
私はEF 5.0 RCとコードファーストアプローチを使用しています。
ご協力いただきありがとうございます。
:
このコードはかなり厄介ですが、投影を使用せずに直接アプローチが成功せず、数回のために頼まれました表現は 'Orange'が' Apple'であることを意味します – Eranga
私のFruitEntitiesを 'DbSet FruitEntities'という表現は、オレンジとアップルが果物であることを意味していますか? –
Flo
'OfType'チェーンには、「FruitEntitiesのすべてのリンゴをフィルタリングし、その結果からフィルタリングして、オレンジであるすべてのリンゴ」が表示されます。これは、オレンジがリンゴである場合のみ意味を持ちます。つまり、' Orange'クラスは 'Apple'クラスから継承されます。あなたはそのクエリで何を達成したいですか?オレンジとリンゴの組み合わせリスト、つまりリンゴ**または**オレンジのすべての果物? – Slauma