我有一个带有个人帐户身份验证的MVC 5项目,以及两个简单的捕获屏幕。
一切正常,直到我决定授予用户注册角色,因此在Register
的帖子操作中,UserManager.CreateAsync
之后,如果成功,我添加了:
UserManager.AddToRoleAsync(user.Id, IdentityData.RoleNames.GeneralAdmin);
然后它扔了SqlException: Invalid column name 'IdentityRoleId'
。
现在,在我尝试授予角色之前,在我使用UserManager
,甚至UserManager.CreateAsync
时,它会抛出此异常。字符串IdentityRoleId
不会出现在项目的任何位置,而是使用列名RoleId
创建自己的表的Identity。
我必须补充一点,当我开始这个项目时,我有两个DbContext
类,一个是我的业务实体,另一个是自动生成的ApplicationDbContext
,其中Identity模型深藏在某个地方。然而,即使在反编译此上下文时,我在RoleId
中也只看到IdentityUserRoles
。
一个分析器跟踪显示了这个查询,我不知道 - 我的代码中没有任何地方。我希望在加载用户并加载用户的角色时会发生这种情况:
exec sp_executesql N'SELECT
1 AS [C1],
[Extent1].[RoleId] AS [RoleId],
[Extent1].[UserId] AS [UserId],
[Extent1].[IdentityRoleId] AS [IdentityRoleId]
FROM [dbo].[IdentityUserRoles] AS [Extent1]
WHERE [Extent1].[UserId] = @p__linq__0',N'@p__linq__0 nvarchar(4000)',@p__linq__0=N'd299ba29-5266-40a2-b6cd-404588926a5b'
这个幻影IdentityRoleId
来自哪里?我应该在哪里看,或者我该怎么做才能追踪它。也许Microsoft.AspNet.Identity.EntityFramework
被打破了,或者EF被打破了,但是一切都在运行,直到我今天早上做出的改变,现在已经完全删除了。