【问题标题】:UserManager.GetRoles doesn't work after extending the IdentityUserRole in MVC 5 Dot Net Identity在 MVC 5 Dot Net Identity 中扩展 IdentityUserRole 后,UserManager.GetRoles 不起作用
【发布时间】:2015-09-02 12:07:48
【问题描述】:

我通过添加外键列扩展了 IdentityUserRole,现在我无法授权或检索角色信息。可以请任何人帮助我解决这个问题。

我的 IdentityUserRole 有一个来自 AspNetApplications 表的外键列,IdentityUserRole 扩展如下

public class AspNetUserRoles : IdentityUserRole
{
    [Key]
    public string ApplicationId { get; set; }

    [ForeignKey("ApplicationId")]
    public AspNetApplications AspNetApplications { get; set; }
}

添加迁移后,我可以看到在 AspNetUserRoles 表中创建了外键列。表格截图如下

这里有两个问题要问

  1. 为什么它创建了一个自动鉴别器列,如果它有任何开销,我如何删除它。
  2. 为了让我的 Authorization 和 UserManager.GetRoles 像执行此扩展之前一样工作,我还需要做些什么。

【问题讨论】:

    标签: c# asp.net-mvc entity-framework-6 owin asp.net-identity-2


    【解决方案1】:

    Discriminator 列是关于 Table per Hierarchy (TPH)。参考此链接What is a Discriminator column in ASP.NET Migrations?

    关于您的身份验证您的鉴别器列应该有问题。例如,此代码 UserManager.GetRoles() 具有用于鉴别器提取数据的 where 子句。

    SELECT [Extent1].[Id] AS [Id], [Extent1].[Name] AS [Name] FROM [dbo].[Roles] AS [Extent1]
    WHERE [Extent1].[Discriminator] = N'Role'
    

    我认为发送到数据库的 select 命令中的 where 子句值与数据库中的值不同

    【讨论】:

    • 谢谢阿拉什。我的数据库中的鉴别器列中没有任何值,因为我直接从 SQL 添加了用户。如果用户是通过代码创建的,我确信 EF 应该添加该值。通过在 AspNetUserRoles 表的鉴别器列中插入我的扩展类名“AspNetUserRoles”,它立即起作用。
    • 学习曲线:yourwelcom。当你向数据库添加记录时要小心,不要使用不同的类来添加记录和从数据库中获取数据。在这种情况下,你会有不同的鉴别器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    • 1970-01-01
    • 2015-04-08
    • 1970-01-01
    相关资源
    最近更新 更多