如何解决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身份的实体框架部分不起作用,因为你可能不使用泛型。
我被卡住了,我想我在概念层面上错过了一些东西。如有需要,乐意提供更多详情
我在一个类似问题的项目中使用了nhibernate,我最终做的是在我的模型中实现IUser。这里Id在BaseModel
中public class ModelClass : BaseModel, IUser
{
public string Name { get; set; }
string IUset<string>Id { get { return this.Id.ToString(); } }
}