我已经使用ASP.net会员多年,并且刚刚开始尝试ASP.net Identity。他们刚刚发布了2.0版,该版本应该支持int
主键。为了获得整数主键支持,我已经如下定义了我的自定义标识类:
public class User : IdentityUser<int, UserLogin, UserRole, UserClaim>
{
}
public class UserLogin : IdentityUserLogin<int>
{
}
public class Role : IdentityRole<int, UserRole>
{
public string Description { get; set; } // Custom description field on roles
}
public class UserRole : IdentityUserRole<int>
{
}
public class UserClaim : IdentityUserClaim<int>
{
}
public class MyDbContext : IdentityDbContext<User, Role, int, UserLogin, UserRole, UserClaim>
{
public MyDbContext() : this("MyDB") { }
public MyDbContext(string connStringName) : base(connStringName)
{
this.Configuration.LazyLoadingEnabled = false;
this.Configuration.ProxyCreationEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
base.OnModelCreating(modelBuilder);
}
}
当我创建数据库迁移时,它会为每个身份表正确创建一个整数Id列,但是,它忽略了在OnModelCreating
方法中指定的自定义表名。相反,我得到像dbo.AspNetUsers
和的表名dbo.AspNetRoles
。
我还尝试将添加[Table("TableName")]
到我的自定义标识类中,但没有任何效果。
在查看ASP.net Identity 1.0的示例时,似乎他们modelBuilder.Entry<Type>().ToTable("TableName")
使用基本Identity类重复了每一行:
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<IdentityUser<int, IdentityUserLogin<int>, IdentityUserRole<int>, IdentityUserClaim<int>>>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<IdentityRole<int, UserRole>>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<IdentityUserRole<int>>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<IdentityUserLogin<int>>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
modelBuilder.Entity<IdentityUserClaim<int>>().ToTable("UserClaims");
但是,我尝试了几种变体,但无法生成迁移。我一直收到类似于类型Microsoft.AspNet.Identity.EntityFramework.IdentityUser'4 [System.Int32,Microsoft.AspNet.Identity.EntityFramework.IdentityUserLogin'1 [System.Int32],Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole的错误未映射'1 [System.Int32],Microsoft.AspNet.Identity.EntityFramework.IdentityUserClaim'1 [System.Int32]]'。通过使用Ignore方法或NotMappedAttribute数据批注检查类型是否未明确排除。验证类型是否定义为类,不是原始类型还是泛型,并且没有从EntityObject继承。
如何在ASP.net Identity 2.0中使用整数主键生成自定义表名?
Grrr……因此,在浪费了几个小时之后,我复制了规则,并将其粘贴到了base.OnModelCreating(modelBuilder);
线下,一切正常。我没有意识到基本方法需要首先被调用:(
现在,使用以下配置,一切都可以正常工作:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder); // This needs to go before the other rules!
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<Role>().ToTable("Roles");
modelBuilder.Entity<UserRole>().ToTable("UserRoles");
modelBuilder.Entity<UserLogin>().ToTable("UserLogins");
modelBuilder.Entity<UserClaim>().ToTable("UserClaims");
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句