C# 为什么我在EF中得到双栏?

C# 为什么我在EF中得到双栏?,c#,entity-framework,C#,Entity Framework,为什么我会得到一个双重的列,如图所示: 如何将这些列合并到一列而不是两列 public class User { [Key] public long id { get; set; } } public class Woman : User { public Woman() { s = new SharedManWoman(); Clone = new Clone.CWoman(); } public Clone.

为什么我会得到一个双重的列,如图所示:

如何将这些列合并到一列而不是两列

public class User
{
    [Key]
    public long id { get; set; }
}

public class Woman : User
{
    public Woman()
    {
        s = new SharedManWoman();
        Clone = new Clone.CWoman();
    }

    public Clone.CWoman Clone { get; set; }
    public SharedManWoman s { get; set; }
}

public class Man : User
{
    public Man()
    {
        s = new SharedManWoman();
        Clone = new Clone.CMan();
    }

    public Clone.CMan Clone { get; set; }
    public SharedManWoman s { get; set; }
}

public class SharedManWoman
{
    [Key]
    public long tableId { get; set; }
}

public class CUser
{
    [Key]
    public long id { get; set; }
}

public class CWoman : CUser {}

public class CMan : CUser {}

这两个属性都是在单独的派生类中定义的,由于它们是导航属性,因此会为每个属性生成一个外键:

public Clone.CWoman Clone { get; set; }

public Clone.CMan Clone { get; set; }
您可以将它们向上移动到基类,并消除CWoman/CMan,而不是使其成为CUser类型:

public class User
{
    [Key]
    public long id { get; set; }
    public Clone.CUser Clone { get; set; }

}

这将消除其中一个重复的FK,但不确定此解决方案是否符合您试图实现的目标。

克隆是如何定义的?我添加了请查看again@RufusLClone是一个属性名,由CWoman和cman在上面的代码中定义,对象CMan和CWoman除了从CUser继承的id之外没有其他属性。在类Man和Woman中,有一个名为Clone的属性,其类型分别为Clone.CMan和Clone.CWoman。该类型是在哪里定义的?