C# 首先在代码中使用非抽象基类的TPT继承

C# 首先在代码中使用非抽象基类的TPT继承,c#,entity-framework,table-per-type,C#,Entity Framework,Table Per Type,我想创建一个TPT映射,其中基类本身保存信息,而派生类只是扩展它 基本上,我有一个基类和一些派生类,我想知道如何处理它们的映射。下面是一个简化得可笑的例子: [Table("Task")] public class Task : TaskBase { // No properties... This is just a "Task", not either an internal nor external one. } [Table("InternalTask")] public cl

我想创建一个TPT映射,其中基类本身保存信息,而派生类只是扩展它

基本上,我有一个基类和一些派生类,我想知道如何处理它们的映射。下面是一个简化得可笑的例子:

[Table("Task")]
public class Task : TaskBase
{
    // No properties... This is just a "Task", not either an internal nor external one.
}

[Table("InternalTask")]
public class InternalTask : TaskBase
{
    public int UserId { get; set; }

    public virtual User User { get; set; }
}

[Table("ExternalTask")]
public class ExternalTask : TaskBase
{
    public int CustomerId { get; set; }

    public virtual Customer Customer { get; set; }
}

public abstract class TaskBase : Entity
{
    /// <summary>Gets or sets the identifier of this item.</summary>
    public int Id { get; set; }

    [...]

    public string Subject { get; set; }

    public virtual User UserCompletedBy { get; set; }
    public virtual User UserLockedBy { get; set; }
    public virtual User UserOwner { get; set; }

    public virtual ICollection<TaskBase> ChildTasks { get; set; }
    public virtual ICollection<TaskAttachment> Attachments { get; set; }
}
[表格(“任务”)]
公共类任务:TaskBase
{
//没有属性…这只是一项“任务”,既不是内部任务,也不是外部任务。
}
[表(“内部任务”)]
公共类内部任务:任务库
{
public int UserId{get;set;}
公共虚拟用户用户{get;set;}
}
[表(“外部任务”)]
公共类外部任务:TaskBase
{
public int CustomerId{get;set;}
公共虚拟客户客户{get;set;}
}
公共抽象类TaskBase:实体
{
///获取或设置此项的标识符。
公共int Id{get;set;}
[...]
公共字符串主题{get;set;}
公共虚拟用户UserCompletedBy{get;set;}
公共虚拟用户UserLockedBy{get;set;}
公共虚拟用户UserOwner{get;set;}
公共虚拟ICollection子任务{get;set;}
公共虚拟ICollection附件{get;set;}
}
现在实体框架生成了一些奇怪的SQL模式,其中包含Customer\u Id字段和User\u Id字段,尽管我已经正确地指定了它们(?)。 因此,我想知道这种模式的正确方法是什么


谢谢大家!

您的
DbContext
中是否只有一个
DbSet
?@AlexanderDerck没有,我还有一个DbSet和一个DbSet。这是错误的吗?我想是的,通常只能将基类作为一个集合,ExternalTask和Internaltask是带有TPT的TaskBase的实例