これは古い投稿ですが、今日も同じ問題が発生し、これについて少し調査しました。調査結果と解決策を共有したいと思います。
問題は、Microsoftがバージョン間でName
に一意のインデックスを追加したことです。 AspNetRoles
の列 、およびこの列のサイズは256であるため、MySqlのインデックスルールに違反します。この問題は、Name
でも発生します AspNetUsers
の列 。
そこで、これを修正する方法を分析しました。最も正しいのは、Name
の長さを短くすることだと思います。 列(私見では、名前がこれほど長いロール/ユーザーを持つ理由は実際にはありません)。
IdentityDbContext(基本クラス)のコードを調査した後、この問題の最も正しい解決策は、OnModelCreating
をオーバーライドすることだと思います。 ApplicationDbContext
で そこにある列のサイズを次のように調整します:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
//... default code for ApplicationDbContext
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
if (modelBuilder == null)
{
throw new ArgumentNullException("modelBuilder");
}
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().Property(u => u.UserName).HasMaxLength(128);
//Uncomment this to have Email length 128 too (not neccessary)
//modelBuilder.Entity<ApplicationUser>().Property(u => u.Email).HasMaxLength(128);
modelBuilder.Entity<IdentityRole>().Property(r => r.Name).HasMaxLength(128);
}
}
このコードは、base.OnModelCreating
を使用したデフォルト構成でIDモデルを初期化します。 呼び出してから、基本クラスで行った設定を独自の設定で上書きします。
移行プロジェクトを作成しているため、移行の作成を再実行して、更新されたモデルを取得する必要があります(または、モデルを手動で変更して列のサイズを調整します)。
これにより問題が解決され、Asp.NETIdentityシステムの全機能が利用できるようになります。
もちろん、プロジェクトの作成時にエラーが発生しないようにするには、移行コードを変更するだけで済みますが、コンテキストによって定義されたモデルとの違いが生じ、問題が発生する可能性があります。