数据库中的某些表:
我从使用Scaffold-DbContext创建模型的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.'
是否可以修改模型,或者数据库中是否有某种强制这种模式的东西?
答案 0 :(得分:0)
Table-per-Type
。它首先添加到EF Core 5 Preview 8中。如果要使用TPT,则必须迁移到EF Core 5。
当前,EF Core 5位于RC2中,可用于生产。来自announcement:
这是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
);