C# 基于TPT实体框架的多级继承

C# 基于TPT实体框架的多级继承,c#,entity-framework,mapping,C#,Entity Framework,Mapping,我有以下资料: public class Entity<TKey> : IEntity { [System.Runtime.Serialization.DataMemberAttribute] public virtual TKey Id { get; set; } [System.Runtime.Serialization.DataMemberAttribute] public virtual StateEnum Stat

我有以下资料:

public class Entity<TKey> : IEntity
{              
    [System.Runtime.Serialization.DataMemberAttribute]
    public virtual TKey Id { get; set; }
    [System.Runtime.Serialization.DataMemberAttribute]
    public virtual StateEnum State { get; set; }}


 public class Party : Entity<int>
{
    public virtual int TypeId { get; set; }
    public virtual string MobileNo1 { get; set; }}


public class Person : Party
{
    public virtual int PartyId { get; set; }
    public virtual string Name { get; set; }}
它不起作用,在这种情况下我如何进行映射

编辑2:

我有以下几点

 public class Entity<TKey> : IEntity
    {              
        [System.Runtime.Serialization.DataMemberAttribute]
        public virtual TKey Id { get; set; }
        [System.Runtime.Serialization.DataMemberAttribute]
        public virtual StateEnum State { get; set; }}


     public class Person : Entity<int>
    {
        public virtual string FirstName{ get; set; }
        public virtual string LastName{ get; set; }
}


    public class Employee: Person 
    {
        public virtual int PersonId { get; set; }
        public virtual string CompanyName{ get; set; }
}
公共类实体:IEntity
{              
[System.Runtime.Serialization.DataMemberAttribute]
公共虚拟密钥Id{get;set;}
[System.Runtime.Serialization.DataMemberAttribute]
公共虚拟状态枚举状态{get;set;}
公共类人员:实体
{
公共虚拟字符串FirstName{get;set;}
公共虚拟字符串LastName{get;set;}
}
公共类员工:人
{
公共虚拟int PersonId{get;set;}
公共虚拟字符串CompanyName{get;set;}
}
我有Person表包含[Id,FirstName,LastName] 我的Employee表包含[PersonId,FirstName,LastName]

--PersonId是person表的外键。 --员工是一对一关系的人。 --为了将来我可以添加学生实体,所以学生就是人


我如何制作映射?

我想您正在尝试这样做:

public class Entity<TKey> : IEntity
{              
[System.Runtime.Serialization.DataMemberAttribute]
public TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public StateEnum State { get; set; }}


public class Party : Entity<int>
{
public int TypeId { get; set; }
public string MobileNo1 { get; set; }

public virtual Person Person {get; set;}
}


public class Person
{
public int PartyId { get; set; }
public string Name { get; set; }

public virtual Party Party {get; set;}
}
这应该正常工作。它基本上说人需要一个党,党需要一个人。因为Person有外键,所以它是依赖项

您还需要在没有所有虚拟属性的情况下更新您的模型,并将虚拟属性添加到相应的实体中(如我发布的模型中)。不过,只使用属性并保持fluent api的原样会容易得多:

public class Entity<TKey> : IEntity
{              
[System.Runtime.Serialization.DataMemberAttribute]
public TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public StateEnum State { get; set; }}


public class Party : Entity<int>
{
public int TypeId { get; set; }
public string MobileNo1 { get; set; }

public virtual Person Person {get; set;}
}


public class Person
{
[Key,ForeignKey("Party")]
public int PartyId { get; set; }
public string Name { get; set; }

public virtual Party Party {get; set;}
}
公共类实体:IEntity
{              
[System.Runtime.Serialization.DataMemberAttribute]
公钥Id{get;set;}
[System.Runtime.Serialization.DataMemberAttribute]
公共状态枚举状态{get;set;}
公共类政党:实体
{
公共int类型ID{get;set;}
公共字符串MobileNo1{get;set;}
公共虚拟人{get;set;}
}
公共阶层人士
{
[钥匙,外国钥匙(“一方”)]
公共int PartyId{get;set;}
公共字符串名称{get;set;}
公共虚拟参与方{get;set;}
}

谢谢你,Alexander,请检查我对以下问题的编辑:)@Doha我会编辑我的答案,一个人可以有多个政党还是政党多人?你们不太清楚他们之间是什么关系。一个人有一个政党。这是一对一的关系,就像员工就是一个人,但政党不需要一个人?它是可选的?是的,如果我有人,就必须有一个聚会;如果我创建了个人io必须创建一方,如果我创建了一方,它需要有个人,也许可以将一方分配给car例如,
员工
既应该是个人又应该有一个指向个人的链接,这有什么原因吗?为什么您在
Employee
上有
PersonId
modelBuilder.Entity<Person>()
            .ToTable("Person")
            .HasKey(p => p.PartyId)
            .HasRequired(p => p.Party)
            .WithRequiredDependent(p => p.Person)
            .Map(pers => pers.MapKey("PartyId");
public class Entity<TKey> : IEntity
{              
[System.Runtime.Serialization.DataMemberAttribute]
public TKey Id { get; set; }
[System.Runtime.Serialization.DataMemberAttribute]
public StateEnum State { get; set; }}


public class Party : Entity<int>
{
public int TypeId { get; set; }
public string MobileNo1 { get; set; }

public virtual Person Person {get; set;}
}


public class Person
{
[Key,ForeignKey("Party")]
public int PartyId { get; set; }
public string Name { get; set; }

public virtual Party Party {get; set;}
}