实体框架核心:TPT

时间:2020-08-27 21:56:58

标签: c# entity-framework-core table-per-type .net-5

.NET 5预览版8刚刚发布,我一直在测试全新的TPT功能。我已经安装了.NET 5预览版8 Runtime和SDK。

我创建了一个.NET Core类库,安装了dotnet-ef预览版8 NuGet,并使用以下命令(管理员)更新了dotnet-ef工具:

dotnet tool update --global dotnet-ef --version 5.0.0-preview.8.20407.4

我已经建立了以下数据库模型:

public class MintPlayerContext : DbContext
{
    // dotnet ef migrations add AddInitialEntities
    // dotnet ef --version

    public MintPlayerContext()
    {
    }

    public DbSet<Subject> Subjects { get; set; }
    public DbSet<Person> People { get; set; }
    public DbSet<Artist> Artists { get; set; }
    public DbSet<Song> Songs { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        base.OnConfiguring(optionsBuilder);
        optionsBuilder.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=MintPlayerTPT;Trusted_Connection=True;ConnectRetryCount=0");
    }
}

[Table("Subjects")]
public class Subject
{
    public int Id { get; set; }
    public string Memo { get; set; }
}

[Table("People")]
public class Person : Subject
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

[Table("Artists")]
public class Artist : Subject
{
    public string Name { get; set; }
    public int YearStarted { get; set; }
    public int YearQuit { get; set; }
}

[Table("Songs")]
public class Song : Subject
{
    public string Title { get; set; }
    public DateTime Released { get; set; }
}

并创建/执行数据库迁移:

dotnet ef migrations add AddInitialEntities
dotnet ef database update

以某种方式将其显示在下表中:

[1]: https://i.stack.imgur.com/hI9ZS.png

表之间的胶水似乎丢失了。甚至更奇怪的是https://devblogs.microsoft.com/dotnet/announcing-entity-framework-core-ef-core-5-0-preview-8/#table-per-type-tpt-mapping的TPT说明,他们指出Pet表获得了AnimalId列。使用TPT时,预计Animal表将包含一些AnimalTypeAnimalTypeId列。

那么这是怎么回事?这是一个误解吗?还是Microsoft(出于性能考虑)仍然坚持某些衍生的数据库结构?

0 个答案:

没有答案