更改ASP.NET标识存储用户数据的数据库

我们创建了一个新的ASP.NET 4.5.1项目,如下所示:

  • Visual Studio 2013
  • 新项目
  • Visual C#
  • 卷筒纸
  • ASP.NET Web应用程序
  • Web API
  • 更改身份validation
  • 个人用户帐户
  • 好的>好的

在解决方案资源管理器> App_Start> Startup.Auth.cs文件中,有以下代码用于配置ASP.NET Indentity。 我们如何更改UserManager存储用户数据的数据库?

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

除了@ ta.speot.is和@Shaun提到的内容之外:您还可以将上下文中的连接字符串(存储在web.config中)的名称传递给IdentityDbContext的基础构造函数

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

本教程包含一个广泛的示例。

另一种方法是使用连接字符串的名称作为上下文构造函数的参数,并将其传递给基础构造函数。

将您自己的DbContext传递给UserStore构造函数或更改名为DefaultConnection的Web.config连接字符串。 无论哪种方式,@ ta.speot.is的评论都是正确的。

正确

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

不正确

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

细节

UserStore类公开了一个非常基本的用户管理API。 在代码中,我们将其配置为在MyDbContext数据存储MyDbContext用户数据存储为IdentityUser类型。

UserManager类公开更高级别的用户管理API,自动保存对UserStore更改。 在代码中,我们将其配置为使用我们刚刚创建的UserStore

UserManagerFactory应实现工厂模式,以便为应用程序的每个请求获取一个UserManager实例。 否则您将获得以下exception:

在创建模型时不能使用上下文。 如果在OnModelCreating方法内部使用上下文,或者同时由多个线程访问相同的上下文实例,则可能抛出此exception。 请注意,DbContext和相关类的实例成员不保证是线程安全的。

就这样。