在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表中创建了外键列。 该表的屏幕截图如下
在这里,我有两个问题要问
- 为什么它创建了一个自动Discriminator列以及如何删除它,如果它有任何开销。
- 为了让我的授权和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子句值与数据库中的值不同