Как получить Entity Framework 4.3 Code First для сопоставления подкласса с использованием Table Per Type (TPT)? - PullRequest
1 голос
/ 01 марта 2012

Я использую EF 4.3 Code First и автоматические миграции. У меня есть следующие 3 класса:

public class BaseUser
{
    [Key]
    [MaxLength(50)]
    public string Username { get; set; }

    [MaxLength(200)]
    public string Password { get; set; }
}

public class AdminUser : BaseUser
{
    public int SettingsFlag { get; set; }
}

public class RegularUser : BaseUser
{
    public DateTime LastLogin { get; set; }
    public DateTime LastSummary { get; set; }

    [MaxLength(100)]
    public string Email { get; set; }

    public int CompanyID { get; set; }
    public int ContactID { get; set; }
}

Когда я запускаю update-database для этого, он использует TPH (Table-Per-Hierarchy) для создания одной таблицы для всех 3, объединяя все эти свойства вместе и добавляя столбец Discriminator.

Как мне получить 3 стола?

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Если вы предпочитаете свободный API, вы можете создать отображение TPT с помощью метода ToTable ():

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<AdminUser>().ToTable("AdminUser");
    modelBuilder.Entity<RegularUser>().ToTable("RegularUser");
}
2 голосов
/ 01 марта 2012

Трюк оказывается довольно простым - явно назовите каждую таблицу, и EF сама определит ее, включая создание отношения FK:

[Table("BaseUser")]
public class BaseUser
...

[Table("AdminUser")]
public class AdminUser : BaseUser
...

[Table("RegularUser")]
public class RegularUser : BaseUser

Это дает мне 3 таблицы ск одному ФК присоединиться как задумано.

...