在MVC 5 Dot Net Identity中扩展IdentityUserRole后,UserManager.GetRoles不起作用

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

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

public class AspNetUserRoles : IdentityUserRole { [Key] public string ApplicationId { get; set; } [ForeignKey("ApplicationId")] public AspNetApplications AspNetApplications { get; set; } } 

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

在此处输入图像描述

在这里,我有两个问题要问

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

Discriminator列是关于每层的表(TPH)。请参阅此链接ASP.NET迁移中的什么是Discriminator列?

关于您的身份validation您的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子句值与数据库中的值不同