将Identity框架数据库改编为另一个自定义数据库。数据库优先(哈希发行)

时间:2018-09-29 02:19:27

标签: asp.net-mvc entity-framework asp.net-identity

我正在尝试在我的网站中实施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”的属性,但是没有说明它是什么以及如何声明它。 谢谢!

1 个答案:

答案 0 :(得分:0)

由于某些原因,它不适用于纯sql查询。 您需要执行以下操作才能使其正常工作。 编辑web.config DefaultConnection字符串以指向自定义数据库(确保您没有AspNet表) 像这样   

请注意,我正在使用“ Datasource =”。引用我的本地数据库服务器。 完成此构建后,运行以注册新用户。这将完美地创建Identity框架数据库结构以及对自定义数据库的所有要求。 例如,在此之后,如果您需要在另一个表上引用AspNetUsers表。只需修改您的自定义数据库即可。

Identity Framework使用它自己的上下文。因此,如果您使用Databasefirst方法,则应添加另一个上下文来运行Db。对于这个问题可能有更好的解决方案(因为您不能仅通过指示db连接字符串来拖动模型。)但这是对我有用的解决方案! 祝你好运!