일부 신중한 검색 후이 게시물이 Authorize and GetRoles doesn't work in ASP.NET Identity입니다. 이것은 마이그레이션의 일부 편집과 함께 문제를 해결했습니다.
는 요약 :
가 내 컨텍스트 파일 에
base.OnModelCreating(modelBuilder);
을 추가하고 모델 생성 부분
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
modelBuilder.Entity<IdentityRole>().ToTable("Role");
modelBuilder.Entity<ApplicationUser>().ToTable("User");
modelBuilder.Entity<IdentityUserRole>().ToTable("UserRole");
//modelBuilder.Entity<IdentityUserLogin>().HasKey<string>(l => l.UserId);
//modelBuilder.Entity<IdentityRole>().HasKey<string>(r => r.Id);
//modelBuilder.Entity<ApplicationUser>().HasMany<IdentityUserRole>(u => u.Roles);
//modelBuilder.Entity<IdentityUserRole>().HasKey(r => new
//{
// r.RoleId,
// r.UserId
//});
마이그레이션 코드가 일부 열을 삭제하고 다른 사람의 이름을 변경하려고
편집, 그래서 삭제하고 이름을 변경하는 대신 이름을 바꿀 열을 삭제하고 기존 열을 그대로 유지했습니다. 기존 열을 삭제하려면 외래 키도 제거해야합니다. 또한 기본 키를 다시 만들지 못하게해야했습니다.
DropIndex("dbo.UserClaim", new[] { "ApplicationUser_Id" });
DropIndex("dbo.UserLogin", new[] { "ApplicationUser_Id" });
DropIndex("dbo.UserRole", new[] { "ApplicationUser_Id" });
DropIndex("dbo.UserRole", new[] { "IdentityRole_Id" });
DropForeignKey("FK_dbo_UserClaim_ApplicationUser_Id", "ApplicationUser_Id");
DropForeignKey("FK_dbo_UserLogin_ApplicationUser_Id", "ApplicationUser_Id");
DropForeignKey("FK_dbo_UserRole_ApplicationUser_Id", "ApplicationUser_Id");
DropForeignKey("FK_dbo_UserRole_IdentityRole_Id", "Identity_Id");
DropColumn("dbo.UserClaim", "ApplicationUser_Id");
DropColumn("dbo.UserLogin", "ApplicationUser_Id");
DropColumn("dbo.UserRole", "ApplicationUser_Id");
DropColumn("dbo.UserRole", "IdentityRole_Id");
//DropPrimaryKey("dbo.UserLogin");
//DropPrimaryKey("dbo.UserRole");
AlterColumn("dbo.User", "Email", c => c.String(maxLength: 256));
AlterColumn("dbo.User", "UserName", c => c.String(nullable: false, maxLength: 256));
AlterColumn("dbo.UserClaim", "UserId", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.UserClaim", "UserId", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.UserLogin", "LoginProvider", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.UserLogin", "ProviderKey", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.UserLogin", "UserId", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.UserRole", "UserId", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.UserRole", "RoleId", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.Role", "Name", c => c.String(nullable: false, maxLength: 256));
//AddPrimaryKey("dbo.UserLogin", new[] { "LoginProvider", "ProviderKey", "UserId" });
//AddPrimaryKey("dbo.UserRole", new[] { "UserId", "RoleId" });
CreateIndex("dbo.User", "UserName", unique: true, name: "UserNameIndex");
CreateIndex("dbo.UserClaim", "UserId");
CreateIndex("dbo.UserLogin", "UserId");
CreateIndex("dbo.UserRole", "UserId");
CreateIndex("dbo.UserRole", "RoleId");
CreateIndex("dbo.Role", "Name", unique: true, name: "RoleNameIndex");
이
는 마이크로 소프트 ASP.NEt 정체성과 좌절 경험이었고 나는 위의 도움이 사람 머리보다 몇 가닥을 유지 바랍니다.
프로젝트에 돌아가서 수동으로 UPDATE를 실행하면 엔티티 모델 또는 테이블을 새로 고쳐야 할 수 있습니다 ... 이것이 박쥐에 대해 생각할 수있는 유일한 것입니다. – MethodMan
PowerShell의 'update-database'명령은 무엇입니까? 만약 그렇다면, 네, 그 이후에 몇 가지 마이그레이션을했습니다 ... – Incognos
'ApplicationUser_Id'와'IdentityRole_Id' 열은 그 테이블에 있어서는 안됩니다. 이 열을 가져 오려면 모델/dbContext를 조정해야합니다. – trailmax