Asp.net身份validation错误
我想整合IdentityContext与mydbcontext,但我正在采取这个错误
在模型生成期间检测到一个或多个validation错误:
Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键。 定义这个EntityType的关键。 Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole :: EntityType“IdentityUserRole”没有定义键。 定义这个EntityType的关键。 IdentityUserLogins:EntityType:EntitySet“IdentityUserLogins”基于没有定义密钥的“IdentityUserLogin”types。 IdentityUserRoles:EntityType:EntitySet“IdentityUserRoles”基于没有定义键的types“IdentityUserRole”。
我如何解决这个问题?
码:
public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser> { static ivdbDb156978Context() { Database.SetInitializer<ivdbDb156978Context>(null); } public ivdbDb156978Context() : base("Name=ivdbContext") { } public DbSet<Car> Cars { get; set; }
应用程序用户
public class ApplicationUser : IdentityUser { }
你的代码不会显示这个,但是从你得到的错误我假设你重写OnModelCreating。这是IdentityDbContext<ApplicationUser>
configurationentity framework映射的地方。 这意味着如果你想重写OnModelCreating,你需要调用基础,或者你必须自己做映射。
所以要么这个:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // your stuff here }
或者你做映射:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId); modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id); modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); }
如果你不想调用base.OnModelCreating,并想要做你自己的映射,你的映射应该是这样的:
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id).Property(p => p.Name).IsRequired(); modelBuilder.Entity<IdentityUserRole>().HasKey(r => new { r.RoleId, r.UserId }); modelBuilder.Entity<IdentityUserLogin>().HasKey(u => new {u.UserId, u.LoginProvider, u.ProviderKey}); }
如果您仅将IdentityUserLogin的密钥放在UserId上,则在使用默认的Googlelogin时会得到DbEntityValidationExceptions。
拿走是你不能有一个空的OnModelCreating
好
protected override void OnModelCreating(DbModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); // your stuff here }
坏
protected override void OnModelCreating(DbModelBuilder modelBuilder) { // base.OnModelCreating(modelBuilder); // your stuff here }
- 如何在ASP.NET MVC 5中实现自定义身份validation
- 如何将我的Autofac容器插入到ASP中。 NET身份2.1
- 如何将ASP.NET MVC5身份validation添加到现有的数据库
- 值不能为空。 参数名称:值,CreateIdentityAsync?
- 使用Windows域帐户和应用程序pipe理的帐户
- 如何更改在ASP.Net MVC身份2的密码validation?
- asp.net身份获取login用户的所有angular色
- 在ApiController操作中获取当前用户,而不传递用户ID作为参数
- 在apicontroller中无法从OwinContext获取UserManager