EF继承和主键

时间:2013-05-16 10:50:08

标签: c# inheritance entity-framework-5

我不确定这是否可以在EF,但我正在创建一堆类,我正在尝试让EF为我创建表。

现在,EF除了一个小问题外,还能很好地创建我的表格。它创建了表格:

  

人    - PersonId(PK)

     

富    - PersonId(PK)    - FooId(INT)

     

浦    - PersonId(PK)    - PooId(INT)

理想情况下,我希望表Foo和Poo中的PersonId不是主键而是外键。这可能吗?尝试使用模型构建器通过以下方式执行此操作:

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; }
}

1 个答案:

答案 0 :(得分:2)

您实现继承的方式遵循每种类型的方法,其中基类的PK是派生类的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)

         

Poo - PersonId(PK,FK)

  

More reading on table per type inheritance