C# 用户类继承IdentityUser;如何处理多重继承的需要?

C# 用户类继承IdentityUser;如何处理多重继承的需要?,c#,inheritance,entity-framework-core,C#,Inheritance,Entity Framework Core,假设我有一个用户类: public class User : IdentityUser { public int CompanyId { get; set; } //other stuff.... } 现在我有了其他的类来代表人们,比如Customer,Employee,SecurityGuard。。。等等 我希望他们都继承Person类: public class Person { public string FirstName { get; set; } p

假设我有一个用户类:

public class User : IdentityUser
{
    public int CompanyId { get; set; }
    //other stuff....
}
现在我有了其他的类来代表人们,比如
Customer
Employee
SecurityGuard
。。。等等

我希望他们都继承
Person
类:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UID { get; set; }
    //etc...
}
public class User : IdentityUser
{
    public int CompanyId { get; set; }        
    public virtual Person Person { get; set; }
    //other stuff....
}

在这一点上,合成将是天赐良机,但由于EF Core还不支持复杂类型,我被卡住了。有什么办法可以解决这个问题吗?

不是每个
用户都是
人。应用程序通常有一些“后台”用户/进程(自动更正服务、计划任务等),这些用户/进程仍然执行应该注册/记录的操作

因此,您可以在
User
类中创建
Person
属性:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UID { get; set; }
    //etc...
}
public class User : IdentityUser
{
    public int CompanyId { get; set; }        
    public virtual Person Person { get; set; }
    //other stuff....
}

并非每个
用户
都是
。应用程序通常有一些“后台”用户/进程(自动更正服务、计划任务等),这些用户/进程仍然执行应该注册/记录的操作

因此,您可以在
User
类中创建
Person
属性:

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string UID { get; set; }
    //etc...
}
public class User : IdentityUser
{
    public int CompanyId { get; set; }        
    public virtual Person Person { get; set; }
    //other stuff....
}

为什么不将属性放入
User
或使
Person
继承自
User
?因为其他类需要继承自Person,而它们不是应用程序中的用户(客户、员工等)。将属性放入用户将意味着将代码复制到其他每一个类中。。。这是我目前唯一的选择。将
Person
的属性提取到interface
IPerson
。让
User
也实现
IPerson
。是的,这是代码的重复,但是由于
User
已经有了一个基类,这是C#允许的最好的方法,同时仍然允许您将
User
传递给处理类person属性的方法。为什么不将属性放入
User
或使
person
User
继承?因为其他类需要从person继承,并且它们不是应用程序中的用户(客户、员工等)。将属性放入用户将意味着将代码复制到其他每个类中…这是我目前唯一的选择。将
Person
的属性提取到interface
IPerson
。让
User
也实现
IPerson
。是的,这是代码的重复,但因为
User
已经有了一个基本类s、 这是C#允许的最好的方法,同时仍然允许您将
User
传递给处理类人属性的方法。