0

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

  1. 公司 - 基类/父类。
  2. Customer - 从 Company 类继承的子类。
  3. Party 类 - 从 Company 类继承的子类。

现在在生成数据库时,它会创建三个单独的表,这是我不想要的。我想为这些实体创建单个表。

我认为 VS 2012 不支持 TPH。

该怎么办 ?

4

2 回答 2

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);
    }
}
于 2013-06-14T13:42:48.557 回答
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

于 2013-06-14T12:24:36.180 回答