gpt4 book ai didi

c# - 使用 ASP.NET Identity 时如何更改表名?

转载 作者:IT王子 更新时间:2023-10-29 03:29:41 25 4
gpt4 key购买 nike

我使用的是 Visual Studio 2013 的发行版(RTM,而非 RC)(从 MSDN 2013-10-18 下载),因此是 AspNet.Identity 的最新 (RTM) 版本。当我创建一个新的 Web 项目时,我选择“个人用户帐户”进行身份验证。这将创建下表:

  1. AspNetRoles
  2. AspNetUserClaims
  3. AspNetUserLogins
  4. AspNetUserRoles
  5. AspNetUsers

当我注册一个新用户(使用默认模板)时,这些表(上面列出的)被创建并且 AspNetUsers 表插入了一条记录,其中包含:

  1. 身份证
  2. 用户名
  3. 密码哈希
  4. 安全戳记
  5. 判别器

此外,通过向“ApplicationUser”类添加公共(public)属性,我已成功向 AspNetUsers 表添加了其他字段,例如“FirstName”、“LastName”、“PhoneNumber”等。

这是我的问题。有没有一种方法可以更改上述表的名称(当它们首次创建时),或者它们将始终使用我上面列出的 AspNet 前缀命名?如果表名可以不同命名,请解释如何命名。

-- 更新--

我实现了@Hao Kung 的解决方案。它确实创建了一个新表(例如我将其称为 MyUsers),但它仍然创建了 AspNetUsers 表。目标是用“MyUsers”表替换“AspNetUsers”表。请参阅下面的代码和创建的表的数据库图像。

我实际上想用我自己的名字替换每个 AspNet 表...对于 fxample、MyRoles、MyUserClaims、MyUserLogins、MyUserRoles 和 MyUsers。

我如何完成这个并最终只得到一组表?

public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public string State { get; set; }
public string PostalCode { get; set; }
public string PhonePrimary { get; set; }
public string PhoneSecondary { get; set; }
}

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext(): base("DefaultConnection")
{
}

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>().ToTable("MyUsers");
}
}

Database Tables

-- 更新答案 --

感谢 Hao Kung 和 Peter Stulinski。这解决了我的问题...

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<IdentityUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<ApplicationUser>().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
modelBuilder.Entity<IdentityUserRole>().ToTable("MyUserRoles");
modelBuilder.Entity<IdentityUserLogin>().ToTable("MyUserLogins");
modelBuilder.Entity<IdentityUserClaim>().ToTable("MyUserClaims");
modelBuilder.Entity<IdentityRole>().ToTable("MyRoles");
}

最佳答案

您可以按照以下方式修改 IdentityModel.cs 轻松完成此操作:

在您的 DbContext 中覆盖 OnModelCreating 然后添加以下内容,这会将 AspNetUser 表更改为“用户”,您还可以更改字段名称,默认 Id 列将变为 User_Id。

modelBuilder.Entity<IdentityUser>()
.ToTable("Users", "dbo").Property(p => p.Id).HasColumnName("User_Id");

或者如果您想保留所有标准列名,则只需使用以下内容:

modelBuilder.Entity<IdentityUser>()
.ToTable("Users", "dbo")

下面的完整示例(这应该在您的 IdentityModel.cs 文件中)我将我的 ApplicationUser 类更改为称为 User。

public class User : IdentityUser
{
public string PasswordOld { get; set; }
public DateTime DateCreated { get; set; }

public bool Activated { get; set; }

public bool UserRole { get; set; }

}

public class ApplicationDbContext : IdentityDbContext<User>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}

protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityUser>()
.ToTable("Users", "dbo").Property(p => p.Id).HasColumnName("User_Id");
modelBuilder.Entity<User>()
.ToTable("Users", "dbo").Property(p => p.Id).HasColumnName("User_Id");
}
}

请注意,如果当前表存在,我还没有设法让它工作。另请注意,您未映射的任何列都将创建默认列。

希望对您有所帮助。

关于c# - 使用 ASP.NET Identity 时如何更改表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460386/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com