Адаптация базы данных Identity Framework в другую пользовательскую базу данных.Сначала база данных (проблема с хэшем) - PullRequest
0 голосов
/ 29 сентября 2018

Я пытаюсь внедрить Microsoft Identity Framework (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);

Я видел подобные вопросы, и есть подсказка, что есть свойство под названием «Дискриминатор», но не описано, что это такое и как мне его объявлять.Спасибо!

1 Ответ

0 голосов
/ 29 сентября 2018

По некоторым причинам это не работает с чистыми SQL-запросами.Вам нужно сделать следующее, чтобы заставить его работать.отредактируйте строку web.config DefaultConnection, чтобы она указала на пользовательскую базу данных (убедитесь, что у вас нет таблиц AspNet). Вот так

Примечание. Я использую «Datasource =».сделать ссылку на мой локальный сервер БД.после выполнения этой сборки и запуска, чтобы зарегистрировать нового пользователя.Это создаст структуру базы данных Identity Framework и все ее требования к вашей пользовательской базе данных.После этого, например, если вам нужно сослаться на таблицу AspNetUsers на другую таблицу.просто измените свою базу данных.

Identity Framework использует свой собственный контекст.Поэтому вы должны добавить другой контекст для запуска вашей базы данных, если вы используете подход Databasefirst.Возможно, найдутся лучшие решения для этой проблемы (поскольку вы не можете перетаскивать модели, просто указав строку подключения к базе данных), но это то, что мне подходит!Удачи!

...