Сначала используйте существующую схему членства в aspnet с новой базой данных ASP.NET MVC

Я ищу некоторые рекомендации здесь... У меня есть старый сайт веб-форм ASP.NET с существующей базой данных и членством в SQL Server, и я создаю новый интерфейс, используя ASP.NET MVC и Entity Framework с базой данных в первую очередь подход.

Итак, у меня есть таблицы, как показано ниже:

таблицы членства - как использовать в MVC

Моя проблема в том, что я не уверен, как использовать эти старые таблицы членства для аутентификации в новом приложении ASP.NET MVC.

Я не возражаю против того, перенесу ли я данные о пользователях / ролях в ASP.NET Identity или продолжу использовать старую базу данных о членстве, но я не уверен, что это лучший подход. Я думаю, что я бы предпочел перенести данные, так как я больше знаком с Identity.

Что я пробовал...

При поиске решений я сталкивался с этим: несколько раз переносить существующий веб-сайт с членства в SQL на удостоверение ASP.NET, однако это (и большая часть того, что я нашел до сих пор) говорит об обновлении существующего сайта веб-форм для использования asp..net личность. Я пытался использовать его части для переноса данных о членстве в удостоверение asp.net, но, конечно, остальные инструкции не соответствуют моему сценарию.

Так вот где я сейчас.

  1. Я использовал сценарий SQL в пошаговом руководстве, указанном выше, для переноса данных о членстве в таблицы идентичности asp.net.

  2. Я настроил SQLPasswordHasher, как описано в пошаговом руководстве, так как я полагаю, что мне понадобится эта функция, чтобы использовать существующие логины.

  3. Я импортировал эти таблицы в базу данных, которая содержит данные веб-сайта, в надежде, что мне придется иметь дело только с одной строкой соединения.

  4. Я модифицировал ApplicationDbContext : base... использовать эту базу данных (ранее она использовала DefaultConnection (LocalDb)

Итак, теперь у меня есть эти таблицы, заполненные данными:

Я застрял.

Вполне возможно, что мне не хватает чего-то простого, но в любом случае, если я пытаюсь войти или зарегистрировать нового пользователя в его текущем состоянии, я получаю ошибку:

Тип сущности ApplicationUser не является частью модели для текущего контекста.

на линии:

var result = await UserManager.CreateAsync(user, model.Password);`

Единственные решения, которые я смог найти для этой ошибки, были в проектах с кодом: что-то связанное с миграциями, которые я не использую (я пробовал, но получил сообщение об ошибке при включении-миграции "Создание DbModelBuilder или писать EDMX из DbContext созданные с использованием базы данных сначала или модели не поддерживаются.")

ОБНОВЛЕНИЕ Хорошо, поэтому я наткнулся на ответ относительно The entity type ApplicationUser is not part of the model for the current context. ошибка, по-видимому, использование строки подключения, сгенерированной структурой сущностей, может быть проблематичным, поэтому, как мне посоветовали, я сделал "нормальную" строку подключения, и это, кажется, становится ближе!

ОБНОВЛЕНИЕ 2

Я думаю, что он работает, будет запускать некоторые тесты, прежде чем обновляться с моим решением.

1 ответ

Пожалуйста, выполните следующие шаги, чтобы сделать это.

  1. Создайте новый проект ASP.NET MVC с аутентификацией пользователя.
  2. Теперь щелкните правой кнопкой мыши на папке "Модель" и добавьте новый элемент "Модель данных объекта ADO.NET", введите имя вашей модели и выберите "ОК". Теперь выберите "Подход к базе данных" и укажите имя базы данных, а также имя подключения и подключения, которые будут сохранены в файле web.config.
  3. Теперь перейдите к файлу web.config, и вы увидите, что в вашей строке подключения определены два подключения, и каждая точка подключения к другой базе данных, одна для IDENTITY, а другая для, которую вы добавили только сейчас. например:
  4. вам нужно изменить источник данных обоих соединений, чтобы они были одинаковыми.
  5. Поэтому, когда вам нужен доступ к пользовательской информации, вам нужно использовать ApplicationDbContext, а для других вы можете использовать свой контекст CustomConn, который вы определили ранее при добавлении новой модели.

Надеюсь, что это поможет вам!

Другие вопросы по тегам