Entity Framework Code First Наследование TPH с общим репозиторием - PullRequest
0 голосов
/ 05 октября 2011

Я, вероятно, неправильно понимаю наследование таблицы в иерархии по коду, но это моя установка: у меня есть HTMLGadgets (и другие типы), наследуемые от Gadget, который наследуется от Entity.У сущности есть одно свойство, Id, поэтому я могу использовать его в универсальном репозитории, как этот учебник .

public abstract class Entity {
    [Key]
    public int Id { get; set; }
}   

public abstract class Gadget : Entity {       
    public string Content { get; set; }
}

public class HTMLGadget : Gadget
{
    public string SomeProperty { get; set;}
}

Для реализации наследования TPH у меня есть это в моем контексте:

public DbSet<Gadget> Gadgets { get; set; }

Итак, я хочу, чтобы все использовали базовый идентификатор, поэтому все является сущностью.Но как мне получить это для участия в первом наследовании кода?Я вижу проблему: если я изменю контекст на

public DbSet<Entity> Entities{ get; set; }

, это может сработать, но у меня будет все (будет больше таблиц, кроме гаджетов) в одной таблице иерархии!Но я не могу понять, как я могу получить классы EF POCO «снизу вверх» в гаджетах, но гаджеты по-прежнему используют базовое свойство Entity Id, чтобы их можно было использовать в общем репозитории.Кто-нибудь может помочь? -

1 Ответ

0 голосов
/ 05 октября 2011

Вам не нужно сопоставлять Entity класс.Представляя DbSet<Entity>, будет отображаться Entity класс.Если вы собираетесь хранить разные типы гаджетов в одной таблице, сопоставьте Gadget и другие подклассы.

Свойства, объявленные в классе Entity`, будут использоваться EF для сопоставления подклассов.

...