2013-02-15 2 views
0

Предположим, у меня есть модель, в которой у меня есть объект Person с общей информацией (имена, дата рождения и т. Д.) И два дополнительных объекта (Customer, Worker), которые наследуются от Person. Как вы видите, есть возможность иметь Клиента, который МОЖЕТ ТАКЖЕ играть роль Рабочего в модели. Есть способ создать это в EF (я видел что-то о TPH, TPT и TPC), но я вижу, что существует использование дискриминатора, который не позволяет таблице Person включать значения для Рабочего и Клиента «одновременно».EF Code First Muliple Inheritance является эксклюзивным?

Я не знаю, может быть, я ошибаюсь в общей концепции наследования ООП: S.

Заранее благодарим за вашу помощь.

ответ

0

Вы не можете иметь множественное наследование в .net, оно не поддерживается (и то же самое относится к инфраструктуре сущности). Вы можете реализовать несколько интерфейсов, но это немного другое понятие, то есть «Рабочий» может быть интерфейсом, который реализуется некоторыми объектами, такими как клиент

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

таблица на тип, по существу, где лица (лицо, клиент, работник), хранятся в разных таблицах, но доступны в качестве отдельных лиц в коде (т.е. клиент с наследством от человека)

It может быть, вам нужно создать интерфейс (возможно, IWorker) и создать класс (возможно, WorkerCustomer?), который наследуется от Клиента и реализует IWorker.

EDIT: 15/02/2013 19:00

Итак, ниже может быть то, что вы ищете в плане, представляющий данные в одной таблице:

public class MyDbContext : DbContext 
{ 
    public MyDbContext() : base("TestDB") 
    { 

    } 

    public DbSet<Person> People { get; set; } 
    public DbSet<Customer> Customers { get; set; } 
    public DbSet<Worker> Workers { get; set; } 
    public DbSet<WorkerCustomer> WorkerCustomers { get; set; } 
} 

public class Person 
{ 
    public int ID { get; set; } 
    public string Name { get; set; } 
} 

public class Customer : Person 
{ 
    public string CustomerNumber { get; set; } 
} 

public interface IWorker 
{ 
    string WorkerNumber { get; set; } 
} 

public class Worker : Person, IWorker 
{ 
    public string WorkerNumber { get; set; } 
} 

public class WorkerCustomer : Customer 
{ 
    public string WorkerNumber { get; set; } 
} 
+0

Но в в этом случае не существует множественного наследования, так как Worker наследует только от Person и Customer, наследует только от Person. Извините, если я не очень хорошо себя объяснил. Возможно, у меня проблема с определением моих сущностей. Спасибо за вашу помощь. – JMGH

+0

Я не уверен на 100%, я знаю, что вы ищете, но я изменил свой ответ на примере того, как вы могли бы подойти к этому, и иметь структуру таблицы, такую ​​как та, которую вы упоминаете, - я думаю! –

Смежные вопросы