如何使用从EDM中不存在的实体派生的类型?

时间:2011-12-15 20:13:32

标签: entity-framework-4 entity-framework-4.1

我有一个派生自实体的类型:

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'。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

这是不可能的。上下文只能实现在EDM中映射的实体类型。从实体类型派生的新类不是实体,不能由EF上下文处理。在这种情况下,唯一的方法是使用映射实体继承。