Доступ с помощью DbContext и UserManager

Есть ли недостатки или преимущества в использовании UserManager или DbContext?

Если я использую это:

public class UserManager<TUser> : IDisposable where TUser : class

public virtual Task<TUser> FindByIdAsync(string userId);

Или, если я использую прямой dbcontext, например:

                var user = dbContext.Users.Where(x => x.Id == model.Id).FirstOrDefault();
// Login like this
 await HttpContext.SignInAsync(..)

person Lora    schedule 20.04.2018    source источник


Ответы (2)


Сегодня вы запрашиваете своих пользователей из своей базы данных. Что если вы решили делегировать аутентификацию серверу авторизации? Я видел, как это случалось раньше: люди решают создать веб-API для обработки деталей аутентификации/авторизации. Если бы вы использовали DbContext напрямую, вам пришлось бы менять везде, где вы будете его использовать.

С другой стороны, используя UserManager, вам просто нужно изменить реализацию вашего UserManager, чтобы использовать HttpClient, чтобы использовать веб-API для запроса пользователей, ролей и других вещей, необходимых для создания вашего идентификатора пользователя.

UserManager инкапсулирует детали реализации через IUserStore и некоторые другие интерфейсы. Я бы не стал запрашивать какие-либо таблицы Identity напрямую, даже если это очень предварительно.

person Alisson    schedule 20.04.2018

Главный недостаток, если вы используете Entity Framework напрямую, заключается в том, что вам придется изменить все ссылки, если вы изменили хранилище на что-то другое.

ASP.NET Core Identity позволяет создавать пользовательские хранилища в два этапа:

  1. Создание класса, реализующего необходимые интерфейсы

    public class MyStore : IUserStore<ApplicationUser>, ... // many more
    { }
    
  2. Замена хранилищ Entity Framework вашими:

    // default
    services.AddIdentity(...).AddEntityFrameworkStores();
    // yours
    services.AddIdentity(...).AddUserStore<MyStore>();
    

Если вам когда-нибудь понадобится создать собственное хранилище из-за бизнес-требований или метода хранения данных, недоступного в Entity Framework Core (или даже если вы захотите удалить EF Core из проекта), вам лучше использовать методы UserManager.

person Camilo Terevinto    schedule 20.04.2018