在MVC 5 Dot Net Identity中扩展IdentityUserRole后,UserManager.GetRoles无法正常工作

时间:2015-09-02 12:07:49

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

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

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

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

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

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

enter image description here

我要问两个问题

  1. 为什么它创建了一个自动Discriminator列以及如何删除它,如果它有任何开销。
  2. 为了让我的授权和UserManager.GetRoles在执行此扩展之前正常工作,我需要做多少工作。

1 个答案:

答案 0 :(得分:0)

Discriminator列是关于每个层次结构的表(TPH)。请参阅此链接What is a Discriminator column in ASP.NET Migrations?

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

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

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