0

안녕 얘들 아, 표준 AspNet 테이블에서 상속을 시도하고있다.Microsoft Identity 사용자 지정 사용자, 역할, 보상 상속

제 의도는 Guid를 기본 키로 사용하고 기본 AspNetUser 을 일부 속성으로 확장하는 것이 었습니다. 또한 테이블 이름의 이름을 바꾸려고했습니다.

는 지금은 같은 것입니다 :

public class User : IdentityUser<Guid, UserLogin, UserRole, UserClaim> 
{ 

    public User() { } 

    public User(string userName) 
    { 
     this.UserName = userName; 
    } 


    public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<User, Guid> manager) 
    { 
     // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType 
     var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie); 
     // Add custom user claims here 
     return userIdentity; 
    } 
} 

내 DbContext는 다음과 같습니다

public class CustomDBContext : IdentityDbContext<User, Role, Guid, UserLogin, UserRole, UserClaim> 
{ 

    public static CustomDBContext Create() 
    { 
     return new CustomDBContext(); 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     base.OnModelCreating(modelBuilder); 

     modelBuilder.Entity<IdentityRole<Guid, UserRole>>().ToTable("Roles"); 
     modelBuilder.Entity<IdentityUserLogin<Guid>>().ToTable("UserLogins"); 
     modelBuilder.Entity<IdentityUserClaim<Guid>>().ToTable("UserClaims"); 
     modelBuilder.Entity<IdentityUserRole<Guid>>().ToTable("UserRoles"); 
     modelBuilder.Entity<IdentityUser<Guid, UserLogin, UserRole, UserClaim>>().ToTable("Users"); 

    } 
} 

불행하게도 때 내 마이그레이션을 생성하기 위해 노력하고 스피. 오류가 발생합니다.

The type 'Microsoft.AspNet.Identity.EntityFramework.IdentityRole`2[System.Guid,Easy1WebAPIData.Models.UserRole]' was not mapped. Check that the type has not been explicitly excluded by using the Ignore method or NotMappedAttribute data annotation. Verify that the type was defined as a class, is not primitive or generic, and does not inherit from EntityObject.

아이디어가 있으십니까? 친애하는!

답변

0

OnModelCreating 방법으로 확장 모델을 매핑하면됩니다. 나는 내 프로젝트에서 다음과 같은 일을하고 있으며 이주와 잘 작동하고있다.

또한 Guid의 키를 사용하는 경우 개체 생성자에서 ID를 설정하는 것이 매우 일반적입니다.

public class ApplicationUser : IdentityUser<Guid, CustomUserLogin, CustomUserRole, CustomUserClaim> 
{ 
    public ApplicationUser() 
    { 
     public ApplicationUser() 
     { 
      Id = Guid.NewGuid(); 
     } 
    } 
} 
0

마지막으로 작동했습니다. thx에서 @ Phil Thomas까지

 modelBuilder.Entity<User>().ToTable("User").Property(p => p.Id).HasColumnName("UserID"); 
     modelBuilder.Entity<User>().Property(p => p.Email).HasColumnName("EmailAddress"); 

     modelBuilder.Entity<UserRole>().HasKey(r => new { r.RoleId, r.UserId }); 
     modelBuilder.Entity<UserRole>().ToTable("UserRole"); 
     modelBuilder.Entity<UserRole>().Property(r => r.UserId).HasColumnName("UserID"); 
     modelBuilder.Entity<UserRole>().Property(r => r.RoleId).HasColumnName("RoleID"); 

     modelBuilder.Entity<UserLogin>().ToTable("UserLogin"); 
     modelBuilder.Entity<UserLogin>().Property(r => r.UserId).HasColumnName("UserID"); 

     modelBuilder.Entity<UserClaim>().ToTable("UserClaim"); 
     modelBuilder.Entity<UserClaim>().Property(r => r.Id).HasColumnName("UserClaimID"); 

     modelBuilder.Entity<Role>().HasKey<Guid>(r => r.Id); 
     modelBuilder.Entity<Role>().ToTable("Role"); 
     modelBuilder.Entity<Role>().Property(r => r.Id).HasColumnName("RoleID"); 

     Configuration.ProxyCreationEnabled = false; 
     Configuration.LazyLoadingEnabled = false;