我正在尝试在我的网站中实施Microsoft的身份框架(IF)。我以这样一种方式设计数据库,即框架可以识别结构并解决该问题。但是,当我注册了一封电子邮件(尽管它确实可以正确接收数据)时,IF哈希器无法正常工作。出现错误,表明ApplicationUser不在上下文中,但是控制器接收到数据,在调试时,我可以看到电子邮件和密码。但在这行上
var result = await UserManager.CreateAsync(user, model.Password);
似乎正在我的模型中寻找一个不存在的值。
因此,我认为问题出在AspNetUsers桌上,我是否错过了一个隐藏的属性?
CREATE TABLE [dbo].[AspNetUsers] (
[Id] NVARCHAR (128) NOT NULL,
[Email] NVARCHAR (256) NULL,
[EmailConfirmed] BIT NOT NULL,
[PasswordHash] NVARCHAR (MAX) NULL,
[Password] [nvarchar](500) NULL,
[SecurityStamp] NVARCHAR (MAX) NULL,
[PhoneNumber] NVARCHAR (MAX) NULL,
[PhoneNumberConfirmed] BIT NOT NULL,
[TwoFactorEnabled] BIT NOT NULL,
[LockoutEndDateUtc] DATETIME NULL,
[LockoutEnabled] BIT NOT NULL,
[AccessFailedCount] INT NOT NULL,
[UserName] NVARCHAR (256) NOT NULL,
[Login] [nvarchar](50) NOT NULL,
[CreationDate] [datetime] NULL,
[ApprovalDate] [datetime] NULL,
[LastLoginDate] [datetime] NULL,
[IsLocked] [bit] NOT NULL,
[PasswordQuestion] [nvarchar](max) NULL,
[PasswordAnswer] [nvarchar](max) NULL,
[ActivationToken] [nvarchar](200) NULL,
CONSTRAINT [PK_dbo.AspNetUsers] PRIMARY KEY CLUSTERED ([Id] ASC),
CONSTRAINT [UX_User_EMail] UNIQUE NONCLUSTERED
(
[EMail] ASC
),
CONSTRAINT [UX_User_Login] UNIQUE NONCLUSTERED
(
[Login] ASC
)
);
ALTER TABLE [dbo].[AspNetUsers] ADD CONSTRAINT [DF_User_IsLocked] DEFAULT ((0)) FOR [IsLocked]
GO
ALTER TABLE [dbo].[AspNetUsers] ADD CONSTRAINT [DF_User_EmailConfirmed] DEFAULT ((0)) FOR [EmailConfirmed]
GO
ALTER TABLE [dbo].[AspNetUsers] ADD CONSTRAINT [DF_User_PhoneNumberConfirmed] DEFAULT ((0)) FOR [PhoneNumberConfirmed]
GO
ALTER TABLE [dbo].[AspNetUsers] ADD CONSTRAINT [DF_User_TwoFactorEnabled] DEFAULT ((0)) FOR [TwoFactorEnabled]
GO
ALTER TABLE [dbo].[AspNetUsers] ADD CONSTRAINT [DF_User_LockoutEnabled] DEFAULT ((0)) FOR [LockoutEnabled]
GO
ALTER TABLE [dbo].[AspNetUsers] ADD CONSTRAINT [DF_User_AccessFailCount] DEFAULT ((0)) FOR [AccessFailedCount]
GO
GO
CREATE UNIQUE NONCLUSTERED INDEX [UserNameIndex]
ON [dbo].[AspNetUsers]([UserName] ASC);
我已经看到类似的问题,并且有一个提示,即有一个名为“ Discriminator”的属性,但是没有说明它是什么以及如何声明它。 谢谢!
答案 0 :(得分:0)
由于某些原因,它不适用于纯sql查询。 您需要执行以下操作才能使其正常工作。 编辑web.config DefaultConnection字符串以指向自定义数据库(确保您没有AspNet表) 像这样
请注意,我正在使用“ Datasource =”。引用我的本地数据库服务器。 完成此构建后,运行以注册新用户。这将完美地创建Identity框架数据库结构以及对自定义数据库的所有要求。 例如,在此之后,如果您需要在另一个表上引用AspNetUsers表。只需修改您的自定义数据库即可。
Identity Framework使用它自己的上下文。因此,如果您使用Databasefirst方法,则应添加另一个上下文来运行Db。对于这个问题可能有更好的解决方案(因为您不能仅通过指示db连接字符串来拖动模型。)但这是对我有用的解决方案! 祝你好运!