1

我正在使用 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 个表创建一个表,将所有这些属性合并在一起并添加一个鉴别器列。

我如何确保我最终得到 3 张桌子?

4

2 回答 2

2

这个技巧非常简单 - 显式命名每个表,EF 自行计算,包括创建 FK 关系:

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

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

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

这让我得到了 3 个按预期进行一对一 FK 连接的表。

于 2012-03-01T05:41:11.200 回答
2

如果您更喜欢 fluent API,那么您可以使用 ToTable() 方法创建 TPT 映射:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<AdminUser>().ToTable("AdminUser");
    modelBuilder.Entity<RegularUser>().ToTable("RegularUser");
}
于 2012-03-26T18:01:26.697 回答