默认情况下,您的数据库的连接设置将由您在问题中引用的名为“DefaultConnection”的连接字符串确定。
要使用的适当连接字符串的名称实际上可以在ApplicationDbContext类的构造函数中更改,从-
public ApplicationDbContext() : base("DefaultConnection", throwIfV1Schema: false)
{
}
到-
public ApplicationDbContext() : base("SomeOtherConnection", throwIfV1Schema: false)
{
}
(throwIfV1Schema 属性显然是版本二的新增功能,版本一中不会出现)
但是,如果没有您希望共享/重用的预先存在的连接字符串,只需将“DefaultConnection”连接字符串详细信息更改为另一个数据库(以及具有适当凭据的用户帐户)的详细信息就足够了。
默认情况下,ASP.NET Identity 将在 ASP.NET Identity 上下文第一次尝试与数据库交互时创建表(如果这些表不存在) - 例如尝试注册或登录。如果您只是更改了连接字符串并运行了应用程序,那么它可能没有尝试创建表 - 您需要明确执行与用户相关的操作。
在您的情况下,您想自己创建表。
可以通过覆盖 OnModelCreating 事件来映射 ASP.NET 标识类和属性。这看起来像-
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
var user = modelBuilder.Entity<IdentityUser>().HasKey(u => u.Id).ToTable("User", "Users"); //Specify our our own table names instead of the defaults
user.Property(iu => iu.Id).HasColumnName("Id");
user.Property(iu => iu.UserName).HasColumnName("UserName");
user.Property(iu => iu.Email).HasColumnName("EmailAddress").HasMaxLength(254).IsRequired();
user.Property(iu => iu.IsConfirmed).HasColumnName("EmailConfirmed");
user.Property(iu => iu.PasswordHash).HasColumnName("PasswordHash");
user.Property(iu => iu.SecurityStamp).HasColumnName("SecurityStamp");
user.HasMany(u => u.Roles).WithRequired().HasForeignKey(ur => ur.UserId);
user.HasMany(u => u.Claims).WithRequired().HasForeignKey(uc => uc.UserId);
user.HasMany(u => u.Logins).WithRequired().HasForeignKey(ul => ul.UserId);
user.Property(u => u.UserName).IsRequired();
...
通过对每个实体使用“ToTable”并为每个属性使用“HasColumnName”,您应该能够映射到您自己的数据库表。
假设您还没有与用户相关的数据库表,您可能希望做的只是在您的数据库内创建一个新架构(例如“用户”),映射 ASP。 NET 表来使用它(ToTable 方法有一个接受模式的重载),并让它像往常一样创建表。这样您就可以有理由确信它不会影响您现有的表、存储过程和数据库函数(但一如既往,请先备份)。
您也可以使用 SQL 脚本自己创建表。我发现创建一个新的空 MVC(如果愿意,可以是 Web 窗体)最简单,应用程序下载 sample NuGet project,将 ASP.NET 身份和实体框架包更新到我正在使用的稳定版本,并将其指向空白数据库 - 然后尝试登录。这为您提供了编写自己的脚本所需的所有表和架构信息。
我在 2013 年 11 月的问题 Create ASP.NET Identity tables using SQL script 中详细介绍了将实体映射到脚本创建的数据库所需的步骤,您可能会发现该问题可供参考 - 尽管您应该记住,从那时起架构已经随着ASP.NET Identity 2 和 2.1,以及我们自己在 1.0 中添加的属性现在在 2.0 之后成为标准。我们添加的其他属性根本不会出现。答案将是方法上的参考,而不是简单的复制和粘贴解决方案。
还请记住,虽然您的主要实体框架上下文可以被允许了解 ASP.NET 身份表 - 它应该不与他们互动超出阅读.当您的 ASP.NET 标识上下文和主实体框架数据上下文同时更新或插入到同一个表时,您会遇到问题,并且不会跨上下文进行更改跟踪。
希望这会有所帮助。