Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thư viện khung thực thể danh tính - Cập nhật cơ sở dữ liệu [MySQL]

Tôi biết đây là một bài viết cũ, nhưng hôm nay tôi gặp vấn đề tương tự và đã điều tra một chút về vấn đề này, đồng thời muốn chia sẻ những phát hiện và giải pháp của tôi.

Vấn đề là Microsoft giữa các phiên bản đã thêm một chỉ mục duy nhất vào Name cột của AspNetRoles và vì cột này có kích thước 256 nên nó phá vỡ các quy tắc chỉ mục của MySql. Sự cố này cũng sẽ xảy ra trên Name trên AspNetUsers .

Vì vậy, tôi đã đi phân tích cách khắc phục điều này và tôi nghĩ rằng cách đúng nhất cần làm là giảm độ dài của Name (IMHO thực sự không có lý do gì để có một vai trò / người dùng với một cái tên dài như vậy).

Sau khi điều tra mã trên IdentityDbContext (là lớp cơ sở), tôi nghĩ rằng giải pháp chính xác nhất cho vấn đề này là ghi đè OnModelCreating trong ApplicationDbContext và điều chỉnh kích thước cột ở đó như sau:

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);
    }
}

Mã này sẽ khởi tạo mô hình nhận dạng với cấu hình mặc định với base.OnModelCreating gọi và sau đó ghi đè các cài đặt được thực hiện trong lớp cơ sở bằng cài đặt của riêng chúng tôi.

Vì bạn đang tạo dự án di chuyển, bạn sẽ cần chạy lại quá trình tạo di chuyển để nhận mô hình được cập nhật (hoặc sửa đổi mô hình của bạn theo cách thủ công để điều chỉnh kích thước cột).

Điều này sẽ giải quyết được vấn đề và bạn sẽ có đầy đủ chức năng của hệ thống Nhận dạng Asp.NET.

Tất nhiên để không gặp bất kỳ lỗi nào khi tạo dự án, bạn chỉ có thể sửa đổi mã di chuyển của mình, nhưng sau đó bạn sẽ có sự khác biệt với mô hình được xác định bởi ngữ cảnh của bạn, điều này không tốt và có thể gây ra sự cố.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. chọn các hàng có id từ một bảng khác

  2. Lưu trữ các phiên trong bảng DB không hoạt động (sử dụng Zend_Session_SaveHandler_DbTable)

  3. Lỗi khởi động máy chủ MySQL 'Máy chủ thoát mà không cập nhật tệp PID'

  4. Làm cách nào để chèn dữ liệu vào hai bảng khác nhau?

  5. PHP Mysql Json và ngôn ngữ Ả Rập