2013-11-15 3 views
57

내가 mydbcontext와 IdentityContext을 통합하고자하지만 난Asp.net 신원 확인 오류

하나 이상의 유효성 검사 오류가 모델 생성 중에 발견 된이 오류 복용하고 있습니다 :

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 
{ 

} 

답변

152

귀하의 코드는 다음을 보여 does't하지만 오류를 당신은 내가 당신이 OnModelCreating.This 어디 IdentityDbContext<ApplicationUser> 구성입니다 무시한다고 가정지고있다 엔티티 프레임 워크 매핑. 즉, OnModelCreating을 재정의하려는 경우 기본을 호출해야하거나 직접 매핑을 수행해야합니다.

그러니이 :

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    base.OnModelCreating(modelBuilder); 

    // your stuff here 
} 

또는 당신은 매핑을 수행하면 base.OnModelCreating를 호출하고 자신의 매핑을하고 싶어하지 않으려면, 당신의 매핑이해야

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

내가 EF에 대해 올바른 답을 찾을 수 있습니다 확신 코드 필요할 때마다 StackOverFlow에서 첫 번째 접근 방식. thanks –

+0

OnModelCreating에 대한 재정의를 만들었으므로 modelBuilder.Conventions.Remove ()를 추가 할 수있었습니다. EF가 내 테이블 이름을 복수화하는 것을 막기 위해 마이 그 레이션을 추가하려는 첫 시도에서이 비트를 사용합니다. 귀하의 매우 도움이 답변을 주셔서 감사합니다 Olav – GDB

+0

안녕하세요 Olav,이 내 키가 정의 된 오류를 해결하지만 지금은 수많은 잘못된 열 이름 오류가 발생합니다. http://stackoverflow.com/questions/23346422/identity-2-usermanager-find-throws-invalid-object-name-dbo-applicationuser-e에 게시했습니다. 이것에 대해 통찰력을 가지시겠습니까? 고마워, 조 – Joe

6

다음과 같이 보입니다.

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의 키를 입력하면 DbEntityVa 기본 Google 로그인을 사용할 때 lidationExceptions.

3

원정 가지고는

좋은 빈 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 
}