以前、Identity 1.0 バージョンで ASP.NET MVC 5 Web サイトを作成し、このプロジェクトで Identity テーブルを作成しました。現在、認証に同じデータベースを使用して別の Web サイトを作成する必要がありますが、現在の Identity バージョンは 2.0 です。そのため、新しい Web サイトで認証しようとすると、いくつかのエラーが発生します。
移行アプローチを使用してデータベースを移行しようとしていますが、混乱しており、There is already an object named 'AspNetRoles' in the database.
PM コンソールで Update-Database と入力するとこのエラーが発生します。
私の質問は、両方のサイト (1 つは 1.0 アイデンティティ バージョンを使用し、もう 1 つは 2.0 を使用する) の認証に同じデータベースを使用する最適な方法は何かということです。本当にデータベースを移行する必要がありますか?
もしそうなら、このエラーをどうやって解決すればいいのでしょうか?
ベストアンサー1
Add-Migration InitialMigrations -IgnoreChanges
これにより、空の「InitialMigration」ファイルが生成されます。次に、必要な変更をクラスに追加します。変更を追加したら、更新コマンドを再度実行します。
update-database -verbose
これで自動移行が適用され、変更内容がテーブルに反映されます。
編集:ID 1を2に移行するソリューションは次のとおりですASP.NET.Identity 1.0 から 2.0 へのアップグレードこの手動移行を使用する
public override void Up()
{
RenameColumn(table: "dbo.AspNetUserClaims", name: "User_Id", newName: "UserId");
RenameIndex(table: "dbo.AspNetUserClaims", name: "IX_User_Id", newName: "IX_UserId");
DropPrimaryKey("dbo.AspNetUserLogins");
AddColumn("dbo.AspNetUsers", "Email", c => c.String(maxLength: 256));
AddColumn("dbo.AspNetUsers", "EmailConfirmed", c => c.Boolean(nullable: false));
AddColumn("dbo.AspNetUsers", "PhoneNumber", c => c.String());
AddColumn("dbo.AspNetUsers", "PhoneNumberConfirmed", c => c.Boolean(nullable: false));
AddColumn("dbo.AspNetUsers", "TwoFactorEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.AspNetUsers", "LockoutEndDateUtc", c => c.DateTime());
AddColumn("dbo.AspNetUsers", "LockoutEnabled", c => c.Boolean(nullable: false));
AddColumn("dbo.AspNetUsers", "AccessFailedCount", c => c.Int(nullable: false));
AlterColumn("dbo.AspNetUsers", "UserName", c => c.String(nullable: false, maxLength: 256));
AlterColumn("dbo.AspNetUsers", "FirstName", c => c.String(nullable: false));
AlterColumn("dbo.AspNetUsers", "LastName", c => c.String(nullable: false));
AddColumn("dbo.AspNetUsers", "CreatedDateTime", c => c.DateTime(nullable: false));
AlterColumn("dbo.AspNetRoles", "Name", c => c.String(nullable: false, maxLength: 256));
AddPrimaryKey("dbo.AspNetUserLogins", new[] { "LoginProvider", "ProviderKey", "UserId" });
CreateIndex("dbo.AspNetUsers", "UserName", unique: true, name: "UserNameIndex");
CreateIndex("dbo.AspNetRoles", "Name", unique: true, name: "RoleNameIndex");
DropColumn("dbo.AspNetUsers", "Discriminator");
}