Изменить базу данных, в которой ASP.NET Identity хранит данные пользователя

мы создали новый ASP.NET 4.5.1 проект следующего содержания:

  • Visual Studio 2013
  • Новый Проект
  • Visual C#
  • Web
  • ASP.NET веб-приложение
  • Web API
  • Изменить Проверку Подлинности
  • Индивидуальные Учетные Записи Пользователей
  • Ок > Ок

в обозревателе решений > App_Start > запуск.Автор.cs файл есть следующий код, который настраивает ASP.NET Indentity. Как изменить базу данных, в которой UserManager хранит пользовательские данные?

static Startup()
{
    PublicClientId = "self";

    UserManagerFactory = () => new UserManager<IdentityUser>(new UserStore<IdentityUser>());

    OAuthOptions = new OAuthAuthorizationServerOptions
    {
        TokenEndpointPath = new PathString("/Token"),
        Provider = new ApplicationOAuthProvider(PublicClientId, UserManagerFactory),
        AuthorizeEndpointPath = new PathString("/api/Account/ExternalLogin"),
        AccessTokenExpireTimeSpan = TimeSpan.FromDays(14),
        AllowInsecureHttp = true
    };
}

2 ответов


дополнительно к чему @ta.спеот.is и @Shaun упомянуто: вы также можете передать имя строки подключения (хранится в интернете.config) в вашем контексте к базовый конструктор IdentityDbContext

public class MyDbContext : IdentityDbContext<MyUser>
{
  public MyDbContext()
    : base("TheNameOfTheConnectionString")
  {
  }
}

этой учебник содержит обширный пример.

другой способ-использовать имя строки подключения в качестве параметра конструктора контекста и передать его базовому конструктору.


Передай свой DbContext до UserStore конструктор или изменить веб.конфиг строку подключения с именем DefaultConnection. В любом случае комментарии @ta.спеот.это правильно.

правильно

// do this - it's the factory pattern
UserManagerFactory 
= () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext()));

неправильно

// do NOT do this - use the preceding code. 
var userStore = new UserStore<IdentityUser>(new MyDbContext());                       
var userManager = new UserManager<IdentityUser>(userStore);
UserManagerFactory = () => userManager;

подробности

на UserStore класс предоставляет очень простой api управления пользователями. В коде мы настраиваем его для хранения пользовательских данных как тип IdentityUser в MyDbContext хранилище данных.

на UserManager класс предоставляет api управления пользователями более высокого уровня, который автоматически сохраняет изменения в UserStore. В коде мы настраиваем его для использования UserStore что мы только что создали.

на UserManagerFactory следует реализовать шаблон фабрики, чтобы получить один экземпляр UserManager по запросу для приложения. В противном случае вы получите следующее исключение:

контекст нельзя использовать, пока модель сотворенный. Это исключение может быть вызвано, если используется контекст внутри метода OnModelCreating или если тот же экземпляр контекста доступ к нескольким потокам одновременно. Обратите внимание, что члены экземпляра DbContext и связанных классов не гарантируется поток безопасный.

вот и все.