在使用ASP.NET Identity时,我如何更改表的名称?

13 浏览
0 Comments

在使用ASP.NET Identity时,我如何更改表的名称?

我使用的是Visual Studio 2013的正式版本(RTM,不是RC),因此使用的是最新的AspNet.Identity版本(RTM)。当我创建一个新的Web项目时,我选择“个人用户账户”进行身份验证。这将创建以下表格:

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

当我注册一个新用户(使用默认模板)时,上述表格会被创建,并且AspNetUsers表格会插入一条记录,其中包含:

  1. Id
  2. UserName
  3. PasswordHash
  4. SecurityStamp
  5. Discriminator

此外,通过在“ApplicationUser”类中添加公共属性,我成功地向AspNetUsers表格添加了额外的字段,例如“FirstName”,“LastName”,“PhoneNumber”等。

这是我的问题。是否有办法在这些表格被创建时更改它们的名称,或者它们总是以我上面列出的AspNet前缀命名?如果表格名称可以命名为不同的名称,请解释如何操作。

-- 更新 --

我实施了@Hao Kung的解决方案。它确实创建了一个新的表格(例如我称其为MyUsers),但它还是会创建AspNetUsers表格。目标是用"MyUsers"表格替换"AspNetUsers"表格。请参见下面的代码和创建的表格的数据库图像。

实际上,我想用自己的名称替换每个AspNet表格...例如,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
{
    public ApplicationDbContext(): base("DefaultConnection")
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity().ToTable("MyUsers");
    }
}

Database Tables

-- 更新答案 --

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

    protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity().ToTable("MyUsers").Property(p => p.Id).HasColumnName("UserId");
        modelBuilder.Entity().ToTable("MyUserRoles");
        modelBuilder.Entity().ToTable("MyUserLogins");
        modelBuilder.Entity().ToTable("MyUserClaims");
        modelBuilder.Entity().ToTable("MyRoles");
    }

0
0 Comments

在使用ASP.NET Identity时,有时候我们希望更改默认的表名。下面是一个解决方法:

1. 在DbContext类中覆盖OnModelCreating方法,并使用modelBuilder.Entity()方法将IdentityUser映射到我们选择的表名。代码如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
    modelBuilder.Entity()
        .ToTable("AspNetUsers");
    base.OnModelCreating(modelBuilder);
}

2. 别忘了调用base.OnModelCreating(modelBuilder),否则其余的模型将不会被创建。

这样就可以更改表名了。希望这个解决方法能帮到你。如果还有问题,请参考上面编辑过的问题。谢谢。

0
0 Comments

在使用ASP.NET Identity时,有时候我们希望修改默认的表名。下面是一个解决方案的示例代码:

public class ApplicationDbContext : IdentityDbContext
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder); // This needs to go before the other rules!
        modelBuilder.Entity().ToTable("User");
        modelBuilder.Entity().ToTable("Role");
        modelBuilder.Entity().ToTable("UserRole");
        modelBuilder.Entity().ToTable("UserClaim");
        modelBuilder.Entity().ToTable("UserLogin");
    }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

在上述代码中,我们通过重写`OnModelCreating`方法来修改表名。我们使用了`modelBuilder.Entity().ToTable("TableName")`的方法来指定表名,其中`T`是相应的Identity类。这样,我们就可以将默认的表名修改为我们希望的名称。

此外,我们还可以通过使用属性来指定表名,而不是使用上述的方法。这样做可能会使代码更加清晰易懂。

需要注意的是,如果我们想要修改表名,我们需要在创建数据库上下文的类中进行相应的设置。在上述代码中,我们创建了一个`ApplicationDbContext`类,并在其中修改了表名。

,如果我们希望在使用ASP.NET Identity时修改表名,我们可以通过重写`OnModelCreating`方法,并使用`modelBuilder.Entity().ToTable("TableName")`的方法来实现。此外,我们还可以使用属性来指定表名。

0
0 Comments

问题的原因是需要在使用ASP.NET Identity时更改表名。解决方法是在IdentityModel.cs文件中修改DbContext的OnModelCreating方法,通过使用modelBuilder.Entity(),可以更改表名和字段名。

具体解决方法如下:

1. 打开IdentityModel.cs文件,重写DbContext的OnModelCreating方法。

2. 使用modelBuilder.Entity()方法设置表名和字段名。例如,使用以下代码将AspNetUser表更改为"Users",并将默认的Id字段更改为"User_Id":

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

3. 或者,如果要保留所有标准列名,可以使用以下代码:

modelBuilder.Entity()
    .ToTable("Users", "dbo");

4. 如果有自定义的ApplicationUser类,也需要在OnModelCreating方法中使用modelBuilder.Entity()设置表名和字段名。

5. 最后,使用迁移工具将更改推送到现有数据库中。

需要注意的是,如果当前表已经存在,可能无法成功更改表名。另外,未映射的字段将使用默认的列名进行创建。

如果不更改IdentityUser表的表名,外键可能会有些奇怪。在重写OnModelCreating方法时,确保调用base.OnModelCreating方法是重写方法的第一行代码,否则后续的代码将被基类Identity类覆盖。

此外,还有一个额外的注意事项,如果有从IdentityRole派生的自定义角色类,需要将基类角色和派生角色使用相同的表名。可以使用以下代码指定两个实体使用相同的表名:

modelBuilder.Entity().ToTable("UserRoles");
modelBuilder.Entity().ToTable("UserRoles");

以上就是解决ASP.NET Identity更改表名的方法。感谢提供解决方案的人员。

0