首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Asp.net身份验证错误

Asp.net身份验证错误
EN

Stack Overflow用户
提问于 2013-11-15 14:08:06
回答 2查看 19.4K关注 0票数 57

我希望将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; }

应用程序用户

    public class ApplicationUser : IdentityUser
{

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-15 15:45:26

您的代码没有显示这一点,但是从您收到的错误中,我假设您正在重写OnModelCreating.This,这是IdentityDbContext<ApplicationUser>配置实体框架映射的地方。这意味着如果您想要覆盖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 });
}
票数 152
EN

Stack Overflow用户

发布于 2014-01-26 01:16:59

如果你不想调用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上,当你使用默认的google登录时,你会得到DbEntityValidationExceptions。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19994590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档