我有一个派生自实体的类型:
public class WidgetB : WidgetA
{
}
WidgetA是一个POCO对象,存在于EDM中; WidgetB在EDM中不存在,但已在ObjectContext中通过如下界面设置:
public interface IContext
{
IObjectSet<WidgetA> WidgetAs { get; }
IQueryable<WidgetB> WidgetBs { get; }
}
public class CustomObjectContext : ObjectContext, IContext
{
private IObjectSet<WidgetA> _widgetAs;
public IObjectSet<WidgetA> WidgetAs
{
get { return _widgetAs ?? (_widgetAs = CreateObjectSet<WidgetAs>()); }
}
private IQueryable<WidgetB> _widgetBs;
public IQueryable<WidgetB> WidgetBs
{
get { return _widgetBs ?? (_widgetBs = CreateObjectSet<WidgetA>("WidgetAs").OfType<WidgetB>()); }
}
WidgetA已在EDM中设置为ComplexType,具有WidgetA所具有的所有属性。
但是当我调用上下文界面时:
public WidgetB GetById(int id)
{
return _context.WidgetB.Include("Blah1").Include("Blah2").Where(r => r.Id == id).SingleOrDefault();
}
这会导致错误:
'OFTYPE表达式'类型参数必须指定EntityType。传递的类型是ComplexType'EntityModel.WidgetB'。
任何帮助都将不胜感激。
答案 0 :(得分:0)
这是不可能的。上下文只能实现在EDM中映射的实体类型。从实体类型派生的新类不是实体,不能由EF上下文处理。在这种情况下,唯一的方法是使用映射实体继承。