c# - 在 Identity 2.0 中扩展 IdentityUserRole

标签 c# asp.net-mvc entity-framework asp.net-identity

因此我的系统要求角色具有关联的到期日期。我已经实现了 Identity 2.0 框架,一切进展顺利,但我遇到了一个让我怀疑我的结构的问题。

public class ApplicationUserRole : IdentityUserRole
{
    public override string UserId { get; set; }
    public override string RoleId { get; set; }
    public DateTime Expiry { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }
    static ApplicationDbContext()
    {
        Database.SetInitializer<ApplicationDbContext>(null);
    }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    public DbSet<ApplicationUserRole> ApplicationUserRoles { get; set; }
}

这就是我想要的。它更改了 AspNetUserRoles 表,以便添加第三列,这是一个名为 Expiry 的 DateTime。我可以使用 ApplicationDBContext 添加、更新和删除过期时间,在编辑用户时一切正常。

问题出现在帐户创建时。 UserManager 调用 AddToRolesAsync,但只采用两个参数,User 和 Role。我需要它来获取用户、角色和到期时间。

我需要实现自己的 UserManager 吗?这似乎有点矫枉过正。

我可以通过不允许在帐户创建时选择角色/到期时间并将其保留为编辑模式来解决这个问题。但我真的很想能够同时创建帐户和分配角色/到期。

最佳答案

请观看以下有关使用现有数据库表使用 asp.net 标识的视频教程。我认为您必须让 ApplicationUser 表知道您的 ApplicationUserRole 表中有新字段。因此,您必须遵循 Entity Framework 模型绑定(bind)才能实现这一目标。

第 1 部分 - https://www.youtube.com/watch?v=elfqejow5hM

第 2 部分 - https://www.youtube.com/watch?v=JbSqi3Amatw

你不需要实现你自己的userManager,但是你必须修改它。希望您可以使用此示例来支持您的需求。

关于c# - 在 Identity 2.0 中扩展 IdentityUserRole,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25857806/

相关文章:

asp.net-mvc - 我如何在 asp.net mvc 方法中读取 cookie?

.net - Edmx 需要 Primary_Key?

c# - EntityFramework DatabaseGenerated.Identity 和 AutoMapper == null ID 键

c# - 如何防止 Entity Framework 代码优先使用不属于模型的派生类

c# - 在分页符上将 WPF TableRow 元素保持在一起

c# - 使用 LINQ 将项目插入堆栈

asp.net-mvc - 导航时维护 url 参数

c# - 如何在 C# 中定义类型变体?

c# - 用常量文字初始化 ArrayList

c# - 为什么 ConfigureAwait(false) 在 Task.Run() 有效时不起作用?