sql >> データベース >  >> RDS >> Mysql

IdentityEntityFrameworkライブラリ-データベースの更新[MySQL]

    これは古い投稿ですが、今日も同じ問題が発生し、これについて少し調査しました。調査結果と解決策を共有したいと思います。

    問題は、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システムの全機能が利用できるようになります。

    もちろん、プロジェクトの作成時にエラーが発生しないようにするには、移行コードを変更するだけで済みますが、コンテキストによって定義されたモデルとの違いが生じ、問題が発生する可能性があります。



    1. RからMySQLに接続する

    2. ストアドプロシージャMySQLでの動的クエリの作成

    3. Mysqlテーブルの重複レコードをカウントしますか?

    4. 1つのSQLに複数のWITHASを含めることはできますか-OracleSQL