Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法获取每类型表(TPT)继承策略-代码优先迁移_C#_Entity Framework_Migration_Ef Fluent Api - Fatal编程技术网

C# 无法获取每类型表(TPT)继承策略-代码优先迁移

C# 无法获取每类型表(TPT)继承策略-代码优先迁移,c#,entity-framework,migration,ef-fluent-api,C#,Entity Framework,Migration,Ef Fluent Api,我上课了 public class Company { public int Id { get; set; } public string Name { get; set; } public DateTime CreatedOn { get; set; } public DateTime? DeactivatedOn { get; set; } public DateTime? UpdatedOn { get; set; } public bool

我上课了

public class Company
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedOn { get; set; }
    public DateTime? DeactivatedOn { get; set; }
    public DateTime? UpdatedOn { get; set; }
    public bool IsActive { get; set; }
}

public class Supplier : Company
{
    public int ContactId { get; set; }
    public int DocumentId { get; set; }
    public int CompanyId { get; set; }
    public virtual Company Company { get; set; }
}
这些是映射

public class CompanyMap : EntityTypeConfiguration<Company>
{
    public CompanyMap()
    {
        // Primary Key
        HasKey(c => c.Id);

        //Table  
        ToTable("Company");

    }
}

public class SupplierMap : EntityTypeConfiguration<Supplier>
{
    public SupplierMap()
    {
        // Primary Key
        HasKey(s => s.Id);

        // Properties

        //Relationship
        HasRequired(s => s.Company)
            .WithMany().HasForeignKey(c => c.CompanyId);

        //Table  
        ToTable("Supplier");

    }
}
公共类公司映射:EntityTypeConfiguration
{
上市公司地图()
{
//主键
HasKey(c=>c.Id);
//桌子
ToTable(“公司”);
}
}
公共类供应商映射:EntityTypeConfiguration
{
公共供应商地图()
{
//主键
HasKey(s=>s.Id);
//性质
//关系
需要(s=>s公司)
.WithMany().HasForeignKey(c=>c.CompanyId);
//桌子
ToTable(“供应商”);
}
}
这就是背景

public class MyContext : DbContext
{

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Configurations.Add(new CompanyMap());
        modelBuilder.Configurations.Add(new SupplierMap());
    }


    public DbSet<Company> Companies { get; set; }
    public DbSet<Supplier> Suppliers { get; set; }

}
公共类MyContext:DbContext
{
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
基于模型创建(modelBuilder);
modelBuilder.Configurations.Add(newcompanymap());
modelBuilder.Configurations.Add(newsuppliermap());
}
公共数据库集公司{get;set;}
公共数据库集提供者{get;set;}
}
播种:

        var companies = new List<Company>
        {
            new Company {Id = 1,  Name = "X", CreatedOn = DateTime.Now, IsActive = true, UpdatedOn = DateTime.Now},
            new Company {Id = 2,  Name = "XX", CreatedOn = DateTime.Now, IsActive = true, UpdatedOn = DateTime.Now},
            new Company {Id = 3,  Name = "XXX", CreatedOn = DateTime.Now, IsActive = true, UpdatedOn = DateTime.Now},
            new Company {Id = 4,  Name = "XXXX", CreatedOn = DateTime.Now, IsActive = true, UpdatedOn = DateTime.Now},
        };

        foreach (var item in companies)
        {
            context.Companies.AddOrUpdate(item);
        }

        var suppliers = new List<Supplier>
        {
            new Supplier {Id = 1, CreatedOn = DateTime.Now, Company = companies[0], IsActive = true, UpdatedOn  = DateTime.Now},
            new Supplier {Id = 2, CreatedOn = DateTime.Now, Company = companies[1], IsActive = true, UpdatedOn = DateTime.Now},
            new Supplier {Id = 3, CreatedOn = DateTime.Now, Company = companies[2], IsActive = true, UpdatedOn = DateTime.Now},
            new Supplier {Id = 4, CreatedOn = DateTime.Now, Company = companies[3],  IsActive = true, UpdatedOn = DateTime.Now}
        };

        foreach (var item in suppliers)
        {
            context.Suppliers.AddOrUpdate(item);
        }

    this.SaveChanges(context);
var公司=新列表
{
新公司{Id=1,Name=“X”,CreatedOn=DateTime.Now,IsActive=true,UpdatedOn=DateTime.Now},
新公司{Id=2,Name=“XX”,CreatedOn=DateTime.Now,IsActive=true,UpdatedOn=DateTime.Now},
新公司{Id=3,Name=“XXX”,CreatedOn=DateTime.Now,IsActive=true,UpdatedOn=DateTime.Now},
新公司{Id=4,Name=“XXXX”,CreatedOn=DateTime.Now,IsActive=true,UpdatedOn=DateTime.Now},
};
foreach(公司中的var项目)
{
context.companys.AddOrUpdate(项目);
}
var供应商=新列表
{
新供应商{Id=1,CreatedOn=DateTime.Now,Company=companys[0],IsActive=true,UpdatedOn=DateTime.Now},
新供应商{Id=2,CreatedOn=DateTime.Now,Company=companys[1],IsActive=true,UpdatedOn=DateTime.Now},
新供应商{Id=3,CreatedOn=DateTime.Now,Company=companys[2],IsActive=true,UpdatedOn=DateTime.Now},
新供应商{Id=4,CreatedOn=DateTime.Now,Company=companys[3],IsActive=true,UpdatedOn=DateTime.Now}
};
foreach(供应商中的var项目)
{
上下文。供应商。添加或更新(项目);
}
保存更改(上下文);
我期望的是两个表都继承了相同的属性(基类和继承类),但我不能这样做,我的结果是一个带有[Discriminator]collunn的表

任何帮助都是非常受欢迎的


关于

强制TPT足以指定ToTable,因此我复制/粘贴了您的代码,一切都如预期的那样

这里使用EF 6.1.3-40302创建表语句

CREATE TABLE [Company] (
 [Id] int not null identity(1,1)
, [Name] text null
, [CreatedOn] datetime not null
, [DeactivatedOn] datetime null
, [UpdatedOn] datetime null
, [IsActive] bit not null
);
ALTER TABLE [Company] ADD CONSTRAINT [PK_Company_65cc9e90] PRIMARY KEY ([Id])



CREATE TABLE [Supplier] (
 [Id] int not null
, [ContactId] int not null
, [DocumentId] int not null
, [CompanyId] int not null
);
ALTER TABLE [Supplier] ADD CONSTRAINT [PK_Supplier_65cc9e90] PRIMARY KEY ([Id])



CREATE INDEX [IX_Id] ON [Supplier] ([Id])



CREATE INDEX [IX_CompanyId] ON [Supplier] ([CompanyId])



ALTER TABLE [Supplier] ADD CONSTRAINT [FK_Supplier_Company_Id] FOREIGN KEY ([Id]) REFERENCES [Company] ([Id])



ALTER TABLE [Supplier] ADD CONSTRAINT [FK_Supplier_Company_CompanyId] FOREIGN KEY ([CompanyId]) REFERENCES [Company] ([Id])
您确定这正是您运行的代码吗?代码上有一个错误,因此您的原始代码可能不同