C# 实体框架核心与继承TPT

C# 实体框架核心与继承TPT,c#,inheritance,entity-framework-core,C#,Inheritance,Entity Framework Core,我读过一些帖子,比如,和 数据库中的一些表: 我从EF4迁移,使用创建模型,我希望它生成以下内容: class Tagesinkassos {} class TagesinkassosPOSTagesinkasso : Tagesinkassos {} class TagesinkassosTagesinkasso : Tagesinkassos {} 相反,我得到了: class TagesinkassosPOSTagesinkasso {} class TagesinkassosTage

我读过一些帖子,比如,和

数据库中的一些表:

我从EF4迁移,使用创建模型,我希望它生成以下内容:

class Tagesinkassos {}
class TagesinkassosPOSTagesinkasso : Tagesinkassos {}
class TagesinkassosTagesinkasso : Tagesinkassos {}
相反,我得到了:

class TagesinkassosPOSTagesinkasso {}
class TagesinkassosTagesinkasso {}
class Tagesinkassos {
    public virtual TagesinkassosPOSTagesinkasso TagesinkassosPOSTagesinkasso { get; set; }
    public virtual TagesinkassosTagesinkasso TagesinkassosTagesinkasso { get; set; }
}
我读到EFCore还不支持TPC,但这是TPT,对吗

但是,如果我修改生成的模型,我会得到:

System.InvalidOperationException: 'The entity type 'TagesinkassosTagesinkasso' cannot be mapped to a table because it is derived from 'Tagesinkassos'. Only base entity types can be mapped to a table.'

是否可以修改模型,或者数据库中是否存在强制此模式的内容?

每种类型的表在低于5.0的EF核心版本中不受支持。它是第一次加入的。如果您想使用TPT,您必须迁移到EF Core 5

目前,EF核心5位于RC2中,可用于生产。从:

这是EF Core 5.0的一个功能完整的候选版本,附带“上线”许可证。支持您在生产中使用它

根据文档的示例,这些类:

[Table("Animals")]
public class Animal
{
    public int Id { get; set; }
    public string Species { get; set; }
}

[Table("Pets")]
public class Pet : Animal
{
    public string Name { get; set; }
}

[Table("Cats")]
public class Cat : Pet
{
    public string EdcuationLevel { get; set; }
}

[Table("Dogs")]
public class Dog : Pet
{
    public string FavoriteToy { get; set; }
}
将映射到以下表:

CREATE TABLE [Animals] (
    [Id] int NOT NULL IDENTITY,
    [Species] nvarchar(max) NULL,
    CONSTRAINT [PK_Animals] PRIMARY KEY ([Id])
);

CREATE TABLE [Pets] (
    [Id] int NOT NULL,
    [Name] nvarchar(max) NULL,
    CONSTRAINT [PK_Pets] PRIMARY KEY ([Id]),
    CONSTRAINT [FK_Pets_Animals_Id] FOREIGN KEY ([Id]) 
               REFERENCES [Animals] ([Id]) ON DELETE NO ACTION
);

CREATE TABLE [Cats] (
    [Id] int NOT NULL,
    [EdcuationLevel] nvarchar(max) NULL,
    CONSTRAINT [PK_Cats] PRIMARY KEY ([Id]),
    CONSTRAINT [FK_Cats_Animals_Id] FOREIGN KEY ([Id]) 
               REFERENCES [Animals] ([Id]) 
               ON DELETE NO ACTION,
    CONSTRAINT [FK_Cats_Pets_Id] FOREIGN KEY ([Id]) 
               REFERENCES [Pets] ([Id]) 
               ON DELETE NO ACTION
);

CREATE TABLE [Dogs] (
    [Id] int NOT NULL,
    [FavoriteToy] nvarchar(max) NULL,
    CONSTRAINT [PK_Dogs] PRIMARY KEY ([Id]),
    CONSTRAINT [FK_Dogs_Animals_Id] FOREIGN KEY ([Id]) 
               REFERENCES [Animals] ([Id]) 
               ON DELETE NO ACTION,
    CONSTRAINT [FK_Dogs_Pets_Id] FOREIGN KEY ([Id]) 
               REFERENCES [Pets] ([Id]) 
               ON DELETE NO ACTION
);

非常感谢,我误解了。我迁移到EFCore 5 rc,有一个问题:他们会问你更多信息。最可能的原因是没有这样的财产。您调用的函数引用的是属性,而不是列。属性名称大小写相同-sensitive@Emaborsa您应该使用重载,以避免打字错误和大小写问题。我同意您的看法,但它是由scaffolding工具生成的代码。