我正在开发 MVC 应用程序。我正在尝试通过模型优先技术来构建项目。我创建了三个类。
- 公司 - 基类/父类。
- Customer - 从 Company 类继承的子类。
- Party 类 - 从 Company 类继承的子类。
现在在生成数据库时,它会创建三个单独的表,这是我不想要的。我想为这些实体创建单个表。
我认为 VS 2012 不支持 TPH。
该怎么办 ?
我正在开发 MVC 应用程序。我正在尝试通过模型优先技术来构建项目。我创建了三个类。
现在在生成数据库时,它会创建三个单独的表,这是我不想要的。我想为这些实体创建单个表。
我认为 VS 2012 不支持 TPH。
该怎么办 ?
您可以通过覆盖 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);
}
}
您需要在构建模型的过程中进行自定义。你这样做覆盖了这样的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