我正在尝试扩展标识3,以便将主键用作整数和我的自定义表。问题是,我希望我的所有数据库类都从BaseEntity
类派生,但ApplicationUser
实体被迫从IdentityUser<int>
派生。
我需要BaseEntity
来实现我的通用存储库模式和DbContext
。
这实际上是我想做的,但C#不支持多类继承:
public class User : BaseEntity, IdentityUser<int>
{
}
public abstract class BaseEntity
{
public int Id{ get; set; }
//Some extra logic
}
你知道这个吗?
我可以用一个以某种方式封装IdentityUser<int>
的接口来实现它吗?
基本上您可以做到这一点,因为Identity Framework的基础是而不是绑定到IdentityUser<T>
类型。Identity<T>
仅在Microsoft.AspNet.Identity.EntityFramework
包中使用。
正如您在Microsoft.AspNet.Identity.EntityFramework的GitHub存储库中看到的,IdentityUser<T>
仅在那里实现。你基本上可以派生它,在那里实现你的基类,并将其用作你的类。
否则,您必须自己实现所有的存储才能使用新的基类。Microsoft.AspNet.Identity的基不依赖于这样的类,所有泛型类都有where TUser : class
,这意味着它可以与任何类一起使用。
如果你不想实现自己的基于身份的实现,一个更简单的解决方案是使用一个接口:
然后你的User
类将看起来像这个
public class IBaseEntity
{
int Id { get; set; }
}
public class User : IdentityUser<int>, IBaseEntity
{
public int Id { get; set; }
}