Изменить базу данных, в которой 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 и связанных классов не гарантируется поток безопасный.
вот и все.