IT박스

Asp.net 신원 확인 오류

itboxs 2020. 12. 14. 07:59
반응형

Asp.net 신원 확인 오류


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
{

}

귀하의 코드는 이것을 표시하지 않지만 오류가 발생하면 OnModelCreating을 재정의한다고 가정 IdentityDbContext<ApplicationUser>합니다. 여기서 엔티티 프레임 워크 매핑을 구성합니다. 즉, OnModelCreating을 재정의하려면 base를 호출하거나 직접 매핑을 수행해야합니다.

그래서 이것은 :

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});
}

UserId에만 IdentityUserLogin에 대한 키를 입력하면 기본 Google 로그인을 사용할 때 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
}

참고 URL : https://stackoverflow.com/questions/19994590/asp-net-identity-validation-error

반응형