2013-05-16 3 views
2

Я не уверен, возможно ли это в EF, но я создаю кучу классов и пытаюсь получить EF для создания таблиц для меня.Наследование EF и первичные ключи

Теперь EF создает мои таблицы в порядке, за исключением незначительной проблемы. Он создал таблицы, как:

Person - PersonId (PK)

Foo - PersonId (PK) - FooId (INT)

Poo - PersonId (PK) - PooId (INT)

В идеале, я хочу, чтобы PersonId в таблицах Foo и Poo был внешним ключом не как первичный ключ. Это возможно? Пробовал с помощью ModelBuilder, чтобы сделать это с помощью:

modelBuilder.Entity<Foo>().HasKey(x => x.FooId).ToTable("Foo"); 

public class Person 
{ 
    public int PersonId { get; private set; } 
} 

public class Foo : Person 
{ 
    public int FooId { get; private set; } 
} 

public class Poo : Person 
{ 
    public int PooId { get; private set; } 
} 

ответ

2

То, как вы реализовали наследование следует таблица на тип подхода, где PK базового класса является ПК производных классов , а также FK обратно к базовому классу.

Вы хотите PersonId in tables Foo and Poo to be a foreign key not as the primary key, поэтому, изменив конфигурацию с

modelBuilder.Entity<Foo>().HasKey(x => x.FooId).ToTable("Foo"); 

к

modelBuilder.Entity<Foo>().ToTable("Foo"); 

базы данных должен выглядеть следующим образом:

Человек - PersonId (PK)

Foo - PersonId (PK, FK)

Пу - PersonId (PK, FK)

More reading on table per type inheritance.

+0

Возможно ли, чтобы PersonId был только FK и чтобы FooId в таблице Foo был PK? –

+0

Да, это возможно. Но в этом случае вы должны создать базу данных вручную и сначала использовать код для привязки объектов к существующей базе данных. –

+0

Я не был полностью уверен, что то, что вы хотели сделать, может быть сделано с использованием кода в первую очередь, и ответ Кирилла Бестемьянова подтверждает это. Посмотрите на эту ссылку, где Ладислав объясняет, как сопоставить TPT с помощью конструктора http://stackoverflow.com/questions/5439273/how-to-map-table-pertyty-tpt-inheritance-in-entity-designer/5443033# 5443033 – MattSull

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