到自定义sql数据库的ASP.net标识连接
我正在尝试将我的asp.net标识类连接到自定义sql数据库。我在OnModelBuilder方法中定义了映射,如下所示:到自定义sql数据库的ASP.net标识连接,asp.net,sql-server,entity-framework,asp.net-mvc-5,asp.net-identity,Asp.net,Sql Server,Entity Framework,Asp.net Mvc 5,Asp.net Identity,我正在尝试将我的asp.net标识类连接到自定义sql数据库。我在OnModelBuilder方法中定义了映射,如下所示: var user = modelBuilder.Entity<IdentityUser>().HasKey(u => u.Id).ToTable("User"); user.Property(iu => iu.Id).HasColumnName("Id"); user.Property(iu =>
var user = modelBuilder.Entity<IdentityUser>().HasKey(u => u.Id).ToTable("User");
user.Property(iu => iu.Id).HasColumnName("Id");
user.Property(iu => iu.UserName).HasColumnName("UserName");
user.Property(iu => iu.PasswordHash).HasColumnName("PasswordHash");
user.Property(iu => iu.SecurityStamp).HasColumnName("SecurityStamp");
user.Property(iu => iu.EmailConfirmed).HasColumnName("EmailConfirmed");
user.Property(iu => iu.LockoutEnabled).HasColumnName("LockoutEnabled");
user.Property(iu => iu.LockoutEndDateUtc).HasColumnName("LockoutEndDateUtc");
user.Property(iu => iu.PhoneNumber).HasColumnName("PhoneNumber");
user.Property(iu => iu.PhoneNumberConfirmed).HasColumnName("PhoneNumberConfirmed");
user.Property(iu => iu.TwoFactorEnabled).HasColumnName("TwoFactorEnabled");
user.Property(au => au.AccessFailedCount).HasColumnName("AccessFailedCount");
user.Property(au => au.TwoFactorEnabled).HasColumnName("TwoFactorEnabled");
//--?--
user.HasMany(u => u.Roles).WithRequired().HasForeignKey(ur => ur.UserId);
user.HasMany(u => u.Claims).WithRequired().HasForeignKey(ur => ur.UserId);
user.HasMany(u => u.Logins).WithRequired().HasForeignKey(ur => ur.UserId);
user.Property(u => u.UserName).IsRequired();
//--
var applicationUser = modelBuilder.Entity<ApplicationUser>().HasKey(au => au.Id).ToTable("User");
applicationUser.Property(au => au.Id).HasColumnName("Id");
applicationUser.Property(au => au.UserName).HasColumnName("UserName");
applicationUser.Property(au => au.Email).HasColumnName("Email");
applicationUser.Property(au => au.PasswordHash).HasColumnName("PasswordHash");
applicationUser.Property(au => au.SecurityStamp).HasColumnName("SecurityStamp");
applicationUser.Property(au => au.EmailConfirmed).HasColumnName("EmailConfirmed");
applicationUser.Property(au => au.ActivationToken).HasColumnName("ActivationToken");
applicationUser.Property(au => au.FirstName).HasColumnName("FirstName");
applicationUser.Property(au => au.LastName).HasColumnName("LastName");
applicationUser.Property(au => au.LockoutEnabled).HasColumnName("LockoutEnabled");
applicationUser.Property(au => au.LockoutEndDateUtc).HasColumnName("LockoutEndDateUtc");
applicationUser.Property(au => au.PhoneNumber).HasColumnName("PhoneNumber");
applicationUser.Property(au => au.PhoneNumberConfirmed).HasColumnName("PhoneNumberConfirmed");
applicationUser.Property(au => au.AccessFailedCount).HasColumnName("AccessFailedCount");
applicationUser.Property(au => au.Discriminator1).HasColumnName("Discriminator1");
applicationUser.Property(au => au.TwoFactorEnabled).HasColumnName("TwoFactorEnabled");
applicationUser.Property(au => au.IdentityRole_Id).HasColumnName("IdentityRole_Id");
//set the primary key for this class. Use .HasMaxLength(40) to specify max length on property
var role = modelBuilder.Entity<IdentityRole>().HasKey(ir => ir.Id).ToTable("Role");
role.Property(ir => ir.Id).HasColumnName("Id");
role.Property(ir => ir.Name).HasColumnName("Name");
var applicationRole = modelBuilder.Entity<ApplicationRole>().HasKey(ar => ar.Id).ToTable("Role");
applicationRole.Property(ir => ir.Id).HasColumnName("Id");
applicationRole.Property(ir => ir.Name).HasColumnName("Name");
//applicationRole.Property(ir => ir.Description).HasColumnName("Description");
var userRole = modelBuilder.Entity<IdentityUserRole>().HasKey(iur => new{iur.UserId, iur.RoleId}).ToTable("UserRole");
userRole.Property(ur => ur.RoleId).HasColumnName("RoleId");
userRole.Property(ur => ur.UserId).HasColumnName("UserId");
var claim = modelBuilder.Entity<IdentityUserClaim>().HasKey(iuc => iuc.Id).ToTable("UserClaim");
claim.Property(iuc => iuc.Id).HasColumnName("Id");
claim.Property(iuc => iuc.ClaimType).HasColumnName("ClaimType");
claim.Property(iuc => iuc.ClaimValue).HasColumnName("ClaimValue");
claim.Property(iuc => iuc.UserId).HasColumnName("UserId");
var login = modelBuilder.Entity<IdentityUserLogin>().HasKey(iul => new { iul.UserId, iul.LoginProvider, iul.ProviderKey }).ToTable("UserLogin");
login.Property(iul => iul.UserId).HasColumnName("UserId");
login.Property(iul => iul.LoginProvider).HasColumnName("LoginProvider");
login.Property(iul => iul.ProviderKey).HasColumnName("ProviderKey");
如果我理解正确,它会在自定义用户表中查找这些列名,即使它们没有在IdentityUser或派生ApplicationUser中定义
我不确定错误在哪里,我的onmodel创建方法?这不是ASP.NET身份问题。您将基类和派生类、IdentityUser和ApplicationUser分别映射到同一个表“User”,这称为“每个类的表层次结构”,因此EF会相应地添加描述符列。 在这种情况下,您应该只映射ApplicationUser类。
这同样适用于IdentityRole和ApplicationRole等。我尝试了[NotMappedAttribute],但没有成功。这忽略了我的整个ApplicationUser类。
Invalid column name 'Discriminator'.
Invalid column name 'IdentityRole_Id'.
Invalid column name 'Discriminator'.
Invalid column name 'Discriminator'.