1. ホーム
  2. asp.net-mvc

[解決済み] データベースに 'AspNetRoles' という名前のオブジェクトがすでに存在します。

2022-02-07 09:04:34

質問

しばらく前に、Identity 1.0 バージョンで ASP.NET MVC 5 ウェブサイトを作成し、このプロジェクトで Identity テーブルを作成しました。現在、同じデータベースを使用して別のWebサイトを作成する必要があるが、Identityのバージョンは2.0になっている。 そのため、新しい Web サイトで認証しようとすると、いくつかのエラーが発生します。

Migrations のアプローチを使ってデータベースを移行しようとしましたが、混乱していて、次のようなエラーが発生しました。 There is already an object named 'AspNetRoles' in the database. PM コンソールで Update-Database と入力したとき。

私の質問は、両方のサイト(1つはIDバージョン1.0を使用し、もう1つは2.0を使用)の認証に同じデータベースを使用する最良の方法は何かということです。本当にデータベースを移行する必要があるのでしょうか?

もしそうなら、このエラーはどのように解決すればいいのでしょうか?

どのように解決するのですか?

Add-Migration InitialMigrations -IgnoreChanges

これで、空の "InitialMigration" ファイルが生成されるはずです。ここで、必要なクラスに必要な変更を追加してください。変更を加えたら、updateコマンドを再度実行してください。

update-database -verbose

これで自動移行が適用され、テーブルがあなたの変更内容で変更されます。

編集する ID1を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");
    }