После тщательного поиска я нашел это Авторизация и GetRoles не работает в публикации 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");
Это был разочаровывающий опыт работы с Microsoft ASP.NET Identity, и я надеюсь, что вышеизложенное поможет кому-то сохранить еще несколько прядей волос.
person
Incognos
schedule
24.10.2014
ApplicationUser_Id
иIdentityRole_Id
не должны быть в этой таблице. Вам нужно настроить свои модели/dbContext, чтобы удалить эти столбцы. - person trailmax   schedule 23.10.2014