我有一个基类和两个派生类。
每个派生类都实现了与属性相同的类型——唯一的区别是属性名称。
遗憾的是,我对类设计没有太大影响-> 它们是从 wsdl 文件生成的。
然后我在 BaseType 上有一个属性来封装公共属性。计划是在我的网络视图等中使用这个属性。
我用著名的“水果示例”来演示这个问题:
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 需要具有与类型参数兼容的多态结果类型的表达式参数。
我正在使用 EF 5.0 RC 和 Code First 方法。
任何帮助深表感谢!