我有一个基类和两个派生类。实体框架不查询派生类 - DbOfTypeExpression中的错误
每个派生类实现与属性相同的类型 - 唯一的区别是属性名称。
可悲的是我没有太多的影响类设计 - >他们已经从一个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需要一个具有与type参数兼容的多态结果类型的表达式参数。
我使用EF 5.0 RC和Code First方法。
任何帮助非常感谢!
这可能是因为你的表达意味着'Orange'是'Apple' – Eranga
我想通过将我的FruitEntities定义为'DbSet FruitEntities'表达意味着橙和苹果是水果?! –
Flo
'OfType'链说:“过滤来自FruitEntities的所有苹果,然后从结果中筛选出所有橙子的苹果”,这只有在桔子是苹果时才有意义,即橙色类继承自Apple类。你想用这个查询来达到什么目的?桔子和苹果的组合清单,即所有苹果**或**桔子的水果? – Slauma