Как настроить ASP. NET Веб-сайт Core 3.1 с идентификацией, аутентификацией и авторизацией для использования Entity Framework 6.4 - PullRequest
0 голосов
/ 31 марта 2020

Целью предоставления. NET Стандартной версии 2.1 EF6 является помощь в поэтапном обновлении существующих проектов.

Итак, у нас есть существующее решение, состоящее из веб-сайтов, windows сервисные и консольные приложения. Мы находимся в процессе обновления с. NET Framework до. NET Core.

Было бы предпочтительнее, чтобы все это снова заработало в. NET Core, но все еще используя. NET Стандартная версия 2.1 EF6 на данный момент.

Модель EF6 основана на IdentityDbContext и содержит хранилище идентификаторов пользователей, роли и т. Д. c.

public class DbContextTasking : IdentityDbContext<AspNetUser, AspNetRole, string, AspNetUserLogin, AspNetUserRole, AspNetUserClaim>

Все код теперь находится в. NET Core или. NET Стандартных сборках.

Обновленные сервисные и консольные приложения windows по существу работают, однако мы боремся с веб-сайтами.

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

<PackageReference Include="Microsoft.AspNet.Identity.EntityFramework" Version="2.2.3" />

"Пакет x был восстановлен с использованием. NET Framework 4.6.1 .... Этот пакет может быть не полностью совместим ... "

Пока игнорируя эти предупреждения, ограничитель шоу понимает, как получить ASP. NET Основной сайт с идентификация, аутентификация и авторизация, подключенные для использования EF6.

Например, примеры, показывающие использование EF Core, имеют в своей функции ConfigureServices:

services.AddDbContext<ApplicationDbContext>(options =>
                options.UseSqlServer(
                    Configuration.GetConnectionString("DefaultConnection")));

Однако '.UseSqlServer' происходит из сборки Microsoft.EntityFrameworkCore.SqlServer

И также с:

services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
                .AddEntityFrameworkStores<DbContextTasking>()
                .AddDefaultTokenProviders();

AddEntityFrameworkStores снова относится к хранилищу EF Core.

Например, 2

Этот пакет образует мост между ASP. NET Ядро и инфраструктура удостоверений:

Microsoft.AspNetCore.Identity.EntityFrameworkCore

Таким образом, можно подумать, что для работы EF6 с ASP. NET Ядром должен быть пакет, схожий по природе (составное имя) с Microsoft.AspNetCore.Identity.EntityFramework6

Если возможно использовать EF6.4 (в c. Таблицах, связанных с идентификацией) в сочетании с ASP. NET Core, пожалуйста, не могли бы вы привести пример, который этого достиг?

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

1 Ответ

0 голосов
/ 31 марта 2020

EF6 не поддерживается для ASP. NET Core Identity; Вы можете использовать только EF Core. Microsoft любит небрежно предлагать, что вы всегда можете просто использовать EF6 всякий раз, когда есть какой-то недостаток в EF Core (а их много, постоянно), но с тех пор все еще существует этот явный вакуум поддержки. NET Core.

У вас есть три варианта:

  1. Используйте EF Core для мест, где вам необходимо ASP. NET Поддержка Core Identity. Вам придется дублировать некоторый код, но у вас может быть контекст EF Core и контекст EF 6, которые оба подключаются к одной и той же базе данных. Вы должны просто рассматривать один конец или другой (скорее всего, сторону EF Core) как базу данных в первую очередь, и, следовательно, не запускать миграции оттуда. Однако, поскольку ASP. NET Core Identity принципиально отличается от ASP. NET Identity, вам необходимо заменить / перенести любые существующие таблицы Identity на версии Core, что затем прекратит любое использование * 1031. *. NET Идентичность. Другими словами, вам придется выбирать один или другой, исключительно.

  2. ASP. NET Core Identity может технически работать с любыми данными источник. EF Core - это то, что поставляется из коробки. Если у вас есть время и желание, вы можете создавать собственные магазины, используя любую технологию, какую захотите. Это сложная задача, но она выполнима, если вам это нужно.

  3. Вы можете использовать централизованного поставщика аутентификации, такого как Identity Server. По сути, это абстрагирует слой авторизации, поэтому не имеет большого значения, находится ли приложение в ядре ASP. NET или ASP. NET. Однако Identity Server 4 интегрируется только с ASP. NET Core Identity и EF Core (по сути, одна и та же проблема). Существует более старая версия Identity Server, которая была создана для ASP. NET, но я понятия не имею о статусе этого (поддерживается ли он, поддерживается и т. Д. c.) Или вы можете сделать , которые работают с ASP. NET Core. Честно говоря, если ваша цель - кросс-совместимость между. NET Framework и. NET Core, я бы go с чем-то вроде Azure AD или Auth0, который может работать с любым из них. Они также по большей части "подключи и работай", в то время как Identity Server требуется немного больше смазки для локтя.

...