Как использовать тип, производный от сущности, которая не существует в EDM? - PullRequest
0 голосов
/ 16 декабря 2011

У меня есть тип, производный от сущности:

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 со всеми свойствами, которые будут иметь 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 голосов
/ 16 декабря 2011

Это невозможно. Контекст может материализовать только те типы объектов, которые отображаются в EDM. Ваш новый класс, производный от типа сущности, не является сущностью и не может быть обработан вашим контекстом EF. Единственным способом в этом случае является использование наследования сопоставленных сущностей.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...