Asp.net mvc 无法使用TPH模式创建数据库。

Asp.net mvc 无法使用TPH模式创建数据库。,asp.net-mvc,asp.net-mvc-3,entity-framework,Asp.net Mvc,Asp.net Mvc 3,Entity Framework,我正在开发MVC应用程序。 我正试图通过模型优先技术来构建这个项目。 我创建了三个类 公司-基本/父类 Customer-从Company类继承的子类 Party类-从Company类继承的子类 现在,在生成DB时,它会创建三个独立的表,这是我不想要的。 我想为这些实体创建一个表 我认为VS 2012不支持TPH 怎么办 您需要在构建模型的过程中进行自定义。您可以这样重写OnModelCreating方法: public class Company { // need this prop

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

  • 公司-基本/父类
  • Customer-从Company类继承的子类
  • Party类-从Company类继承的子类 现在,在生成DB时,它会创建三个独立的表,这是我不想要的。 我想为这些实体创建一个表

    我认为VS 2012不支持TPH


    怎么办

    您需要在构建模型的过程中进行自定义。您可以这样重写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'));
        }
    }
    
    上市公司
    {
    //需要此属性对客户具有C值或对第三方具有P值。
    公共字符CustomerOrParty{get;set;}
    //其他财产。
    // ...
    }
    公共类客户:公司
    {
    //代码
    }
    公共类政党:公司
    {
    //代码
    }
    公共类EFContext:DbContext
    {
    公共数据库集公司{get;set;}
    模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity()
    .Map(m=>m.Requires(“CustomerOrParty”).HasValue('C'))
    .Map(m=>m.Requires(“CustomerOrParty”).HasValue('P');
    }
    }
    

    您可以在这里看到一个教程:

    您可以通过覆盖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);
        }
    }
    
    公共类EFContext:DbContext
    {
    公共数据库集公司{get;set;}
    公共数据库集客户{get;set;}
    公共数据库集参与方{get;set;}
    模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
    {
    modelBuilder.Entity()
    .ToTable(“公司”);
    modelBuilder.Entity()
    .ToTable(“公司”);
    modelBuilder.Entity()
    .ToTable(“公司”);
    }
    }
    
    您的
    公司是抽象类吗?是的,公司是抽象类。。。