如何解决c#中缺少的多重继承问题

本文关键字:多重继承 问题 何解决 解决 | 更新日期: 2023-09-27 18:17:33

我有一个由实体框架为我的用户生成的POCO类:

public partial class AppUser : BaseEntity
{
    public int User_Id { get; set; }
    public string SpecialProperty { get; set; }
}

我有一个花哨的身份验证提供程序项目,它实现了asp.net身份,并有一个MyIdentityUser类,继承了微软提供的IdentityUser。

public class MyIdentityUser : IdentityUser<int, MyIdentityUserLogin, MyIdentityUserRole, MyIdentityUserClaim>
{
     .... (needs the properties of appuser around here) ...
     .... (need the properties of IdentityUser around here too) ...
}

现在,因为我想在多个项目中使用我的花式验证提供程序,我需要在数据库存储中传递对象的"实际类型"-以便可以填充非空字段等。

类MyIdentityUser需要POCO类的属性,以便从数据库中检索这些属性,并正确创建新记录,并且它需要IdentityUser的属性来与microsoft的aspnet身份实现一起工作。

我希望能够写出下面的语句,这样我就可以传入要使用的类型:

IdentityProvider<AppUser> provider = new IdentityProvider<AppUser>();

但是我的问题是-我的AppUser类继承自BaseEntity, MyIdentityUser必须继承自IdentityUser,所以它不能扩展AppUser。

如何解决这个问题,没有:

1)验证提供者与EF类型紧密耦合?

2)将所有POCO属性重写为项目中的硬编码接口,并从中继承(属性首先从数据库EF中驱动)

我试图添加POCO类作为MyIdentityUser的属性,但随后asp.net身份的实体框架部分不起作用,因为你可能不使用泛型。

我被卡住了,我想我在概念层面上错过了一些东西。如有需要,乐意提供更多详情

如何解决c#中缺少的多重继承问题

我在一个类似问题的项目中使用了nhibernate,我最终做的是在我的模型中实现IUser。这里Id在BaseModel

public class ModelClass : BaseModel, IUser
{
    public string Name { get; set; }
    string IUset<string>Id { get { return this.Id.ToString(); } }
}