在使用ASP.NET Identity时,我如何更改表的名称?
在使用ASP.NET Identity时,我如何更改表的名称?
我使用的是Visual Studio 2013的正式版本(RTM,不是RC),因此使用的是最新的AspNet.Identity版本(RTM)。当我创建一个新的Web项目时,我选择“个人用户账户”进行身份验证。这将创建以下表格:
- AspNetRoles
- AspNetUserClaims
- AspNetUserLogins
- AspNetUserRoles
- AspNetUsers
当我注册一个新用户(使用默认模板)时,上述表格会被创建,并且AspNetUsers表格会插入一条记录,其中包含:
- Id
- UserName
- PasswordHash
- SecurityStamp
- 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"); } }
-- 更新答案 --
感谢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"); }
在使用ASP.NET Identity时,有时候我们希望更改默认的表名。下面是一个解决方法:
1. 在DbContext类中覆盖OnModelCreating方法,并使用modelBuilder.Entity
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity() .ToTable("AspNetUsers"); base.OnModelCreating(modelBuilder); }
2. 别忘了调用base.OnModelCreating(modelBuilder),否则其余的模型将不会被创建。
这样就可以更改表名了。希望这个解决方法能帮到你。如果还有问题,请参考上面编辑过的问题。谢谢。
在使用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
此外,我们还可以通过使用属性来指定表名,而不是使用上述的方法。这样做可能会使代码更加清晰易懂。
需要注意的是,如果我们想要修改表名,我们需要在创建数据库上下文的类中进行相应的设置。在上述代码中,我们创建了一个`ApplicationDbContext`类,并在其中修改了表名。
,如果我们希望在使用ASP.NET Identity时修改表名,我们可以通过重写`OnModelCreating`方法,并使用`modelBuilder.Entity
问题的原因是需要在使用ASP.NET Identity时更改表名。解决方法是在IdentityModel.cs文件中修改DbContext的OnModelCreating方法,通过使用modelBuilder.Entity
具体解决方法如下:
1. 打开IdentityModel.cs文件,重写DbContext的OnModelCreating方法。
2. 使用modelBuilder.Entity
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更改表名的方法。感谢提供解决方案的人员。