Извлекайте связанные сущности, литейные в их конкретных типах - PullRequest
2 голосов
/ 15 декабря 2011

Можно ли запросить EF через интерфейс и получить данные, которые можно преобразовать в конкретный тип?

Допустим, я получил:

public interface IBaseBlock
{
    int Id { get; set; }
    string Name { get; set; }
}

public class ContentBlock : IBaseBlock
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Content { get; set; }
}

public class VideoBlock : IBaseBlock
{
    public int Id { get; set; }
    public string Name { get; set; }
    string string VideoUrl { get; set; }
}

Итак, я хочу иметь возможностьполучить список из структуры сущностей на основе IBaseBlock и затем преобразовать их в конкретные типы для получения дополнительных данных.

Теперь я знаю, что это возможно сделать с помощью nhibernate (/2528774/nhibernate-zaprashivaet-vse-obekty-realizuyschie-interfeis),, и я знаю все, что он делаетэто создание множества SQL-запросов, но все в одной и той же базе данных. Мне также не важны дополнительные данные при выдаче запроса (я не хочу иметь возможность добавлять, где и в каком порядке и т. д.)Мне просто нужно отфильтровать по общим полям (Id и Name).

Спасибо

1 Ответ

1 голос
/ 15 декабря 2011

Entity Framework не поддерживает запросы по интерфейсу (EF вообще не поддерживает интерфейсы).Он поддерживает только сопоставленное наследование сущностей.Чтобы заставить его работать, вы должны изменить свой IBaseBlock интерфейс на BaseBlock абстрактный класс и наследование карты (возможно, TPC).Использование наследования имеет ряд других подводных камней.Например, первичный ключ любой сущности должен быть уникальным во всем дереве наследования.

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

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