Table-per-type (TPT) mapping
Last updated
public class EntityContext : DbContext
{
protected override void OnConfiguring(DbContextOptionsBuilder opBuilder)
{
opBuilder.UseSqlServer("Data Source=(localdb)\\ProjectsV13;Initial Catalog=PeopleContextDb;");
}
public DbSet<Person> People { get; set; }
public DbSet<Student> Students { get; set; }
public DbSet<Teacher> Teachers { get; set; }
}CREATE TABLE [dbo].[People] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FullName] NVARCHAR (MAX) NULL,
[Discriminator] NVARCHAR (MAX) NOT NULL,
[EnrollmentDate] DATETIME2 (7) NULL,
[HireDate] DATETIME2 (7) NULL,
CONSTRAINT [PK_People] PRIMARY KEY CLUSTERED ([Id] ASC)
);[Table("People")]
public class Person
{
public int Id { get; set; }
public string FullName { get; set; }
}
[Table("Students")]
public class Student : Person
{
public DateTime EnrollmentDate { get; set; }
}
[Table("Teachers")]
public class Teacher : Person
{
public DateTime HireDate { get; set; }
}CREATE TABLE [dbo].[People] (
[Id] INT IDENTITY (1, 1) NOT NULL,
[FullName] NVARCHAR (MAX) NULL,
CONSTRAINT [PK_People] PRIMARY KEY CLUSTERED ([Id] ASC)
);
CREATE TABLE [dbo].[Students] (
[Id] INT NOT NULL,
[EnrollmentDate] DATETIME2 (7) NOT NULL,
CONSTRAINT [PK_Students] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Students_People_Id] FOREIGN KEY ([Id]) REFERENCES [dbo].[People] ([Id])
);
CREATE TABLE [dbo].[Teachers] (
[Id] INT NOT NULL,
[HireDate] DATETIME2 (7) NOT NULL,
CONSTRAINT [PK_Teachers] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [FK_Teachers_People_Id] FOREIGN KEY ([Id]) REFERENCES [dbo].[People] ([Id])
);