无法使用TPH模式创建数据库。

时间:2013-06-14 09:59:22

标签: asp.net-mvc asp.net-mvc-3 entity-framework

我正在开发MVC应用程序。 我试图通过模型第一技术来构建项目。 我创建了三个类。

  1. 公司 - 基础/家长班。
  2. 客户 - 继承自公司类的子类。
  3. 派对类 - 继承自Company类的子类。
  4. 现在在生成数据库时,它创建了三个单独的表,我不想要。 我想为这些实体创建单个表。

    我认为VS 2012不支持TPH。

    怎么办?

2 个答案:

答案 0 :(得分:0)

您需要在构建模型的过程中进行自定义。你这样做会覆盖OnModelCreating方法,如下所示:

public class Company
{
    // need this property has value C to customer or P to party.
    public char CustomerOrParty { get; set; }

    // other properties.
    // ...
}

public class Customer : Company
{
    // code
}

public class Party : Company
{
    // code
}

public class EFContext : DbContext
{
    public DbSet<Company> Companies { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Company>()
            .Map<Customer>(m => m.Requires("CustomerOrParty").HasValue('C'))
            .Map<Party>(m => m.Requires("CustomerOrParty").HasValue('P'));
    }
}

您可以在此处查看教程:http://blogs.msdn.com/b/wriju/archive/2011/05/17/code-first-ef-4-1-table-per-hierarchy.aspx

答案 1 :(得分:0)

您可以通过覆盖OnModelCreating将模型映射到表。

public class EFContext : DbContext
{
    public DbSet<Company> Companies { get; set; }
    public DbSet<Customer> Customers{ get; set; }
    public DbSet<Party> Parties{ get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Company>()
            .ToTable("Company);
        modelBuilder.Entity<Customer>()
            .ToTable("Company);
        modelBuilder.Entity<Party>()
            .ToTable("Company);
    }
}