use*_*375 57 asp.net-mvc-5 asp.net-identity
我想将IdentityContext与mydbcontext集成,但我正在接受此错误
在模型生成期间检测到一个或多个验证错误:
Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserLogin :: EntityType'IdentityUserLogin'没有定义键.定义此EntityType的键.Ivdb.Dal.Concrete.EFCodeFirst.IdentityUserRole :: EntityType'IdentityUserRole'没有定义键.定义此EntityType的键.IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'基于没有定义键的类型'IdentityUserLogin'.IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基于类型'IdentityUserRole',没有定义键.
我怎么解决这个问题?
码:
public partial class ivdbDb156978Context : IdentityDbContext<ApplicationUser>
{
static ivdbDb156978Context()
{
Database.SetInitializer<ivdbDb156978Context>(null);
}
public ivdbDb156978Context()
: base("Name=ivdbContext")
{
}
public DbSet<Car> Cars { get; set; }
Run Code Online (Sandbox Code Playgroud)
应用用户
public class ApplicationUser : IdentityUser
{
}
Run Code Online (Sandbox Code Playgroud)
Ola*_*ybø 152
你的代码没有显示这个,但是从你得到的错误中我假设你重写了OnModelCreating.这是IdentityDbContext<ApplicationUser>配置实体框架映射的地方.这意味着如果要覆盖OnModelCreating,则需要调用基数,或者必须自己进行映射.
所以要么:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// your stuff here
}
Run Code Online (Sandbox Code Playgroud)
或者你做映射:
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 });
}
Run Code Online (Sandbox Code Playgroud)
如果您不想调用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});
}
Run Code Online (Sandbox Code Playgroud)
如果仅将IdentityUserLogin的密钥放在UserId上,则在使用默认的Google登录时会获得DbEntityValidationExceptions.
| 归档时间: |
|
| 查看次数: |
19271 次 |
| 最近记录: |