Entity Framework - Наследование - PullRequest
       6

Entity Framework - Наследование

1 голос
/ 12 февраля 2009

Я только начинаю с Entity Framework, и у меня возникает следующая проблема:

У меня есть объект Site , который содержит свойство навигации Абзацы .

У меня есть несколько объектов (т. Е. ImageParagraph , LinkListParagraph ), которые должны быть унаследованы от Абзац .

Я бы хотел запросить объект Site и получить доступ к его параграфам и работать с ними в зависимости от их конкретного типа (то есть ImageParagraph , LinkListParagraph ).

Это будет работать с подходом Table Per Hierarchy (с условиями), но тогда я получу очень грязное решение. Запросы для конкретного типа на основе идентификатора абзаца будут работать, но я надеюсь, что есть более лучшее решение.

Я хочу запросить Сайт и показать некоторые специфичные для Сайта данные и данные в Абзацах ( ImageParagraph , LinkListParagraph ). Я не знаю, как настроить отображение таким образом, чтобы можно было извлекать объекты ImageParagraph , LinkListParagraph непосредственно через свойство навигации Paragraphs .

Как бы вы решили эту проблему?

ER-диаграмма: http://img443.imageshack.us/img443/46/69863714ks0.jpg

альтернативный текст http://img443.imageshack.us/img443/46/69863714ks0.jpg

1 Ответ

2 голосов
/ 12 февраля 2009

Если вы хотите работать с ними на основе на их конкретном типе - это звучит как случай полиморфизма ... вы можете (в неполном классе) добавить несколько методов?

partial class Paragraph {
    public abstract void Foo();
}
partial class ImageParagraph {
    public override void Foo() {/*code*/}
}
partial class LinkListParagraph {
    public override void Foo() {/*code*/}
}

В противном случае, если вы хотите отфильтровать набор, вы можете использовать метод расширения OfType - т.е.

foreach(var imgPara in obj.Paragraphs.OfType<ImageParagraph>())
{ ... }

Возможно, вы могли бы добавить свойства и для вышеперечисленного (в родительском объекте) - т.е.

partial class Site {
    public IQueryable<ImageParagraph> ImageParagraphs
    { get {return Paragraphs.OfType<ImageParagraph>(); }}

    public IQueryable<LinkListParagraph> LinkListParagraphs
    { get {return Paragraphs.OfType<LinkListParagraph>(); }}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...