Hướng Dẫn Sử Dụng Migration

0 0 0

Người đăng: H Hiếu

Theo Viblo Asia

Hướng Dẫn Sử Dụng Migration trong .NET với EF Core

Giới thiệu

Migration trong Entity Framework Core (EF Core) giúp quản lý và đồng bộ hóa các thay đổi trong mô hình dữ liệu với cơ sở dữ liệu. File này hướng dẫn cách thiết lập, sử dụng migration, tạo script SQL giữa các migration và cho một migration cụ thể.

Yêu cầu

  • .NET SDK (phiên bản 6.0 trở lên)
  • Công cụ EF Core CLI:
    dotnet tool install --global dotnet-ef
    
  • Các gói NuGet cần thiết trong file .csproj:
    <ItemGroup> <PackageReference Include="Microsoft.EntityFrameworkCore" Version="8.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="8.0.0" /> <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="8.0.0" /> <!-- Thay bằng gói DB phù hợp -->
    </ItemGroup>
    

Cấu hình

  1. Thiết lập DbContext: Trong Program.cs:

    builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
    
  2. Chuỗi kết nối: Trong appsettings.json:

    { "ConnectionStrings": { "DefaultConnection": "Server=localhost;Database=MyDb;Trusted_Connection=True;" }
    }
    

Các lệnh Migration cơ bản

Chạy các lệnh trong thư mục chứa project có DbContext.

  1. Tạo Migration:

    dotnet ef migrations add <TênMigration>
    

    Ví dụ: dotnet ef migrations add InitialCreate

  2. Áp dụng Migration:

    dotnet ef database update
    
  3. Hoàn tác Migration:

    dotnet ef database update <TênMigrationTrước>
    
  4. Xóa Migration chưa áp dụng:

    dotnet ef migrations remove
    
  5. Tạo Script SQL:

    • Script cho toàn bộ migration:
      dotnet ef migrations script
      
    • Script giữa hai migration:
      dotnet ef migrations script <TênMigrationCũ> <TênMigrationMới>
      
      Ví dụ: dotnet ef migrations script InitialCreate 20231010120000_UpdateUserTable
    • Script cho một migration cụ thể:
      dotnet ef migrations script <MigrationTrước> <MigrationCầnGen>
      
      Ví dụ: dotnet ef migrations script 0 InitialCreate (cho migration đầu tiên)
      Hoặc: dotnet ef migrations script InitialCreate 20231010120000_UpdateUserTable
    • Lưu script vào file:
      dotnet ef migrations script <TênMigrationCũ> <TênMigrationMới> -o migration.sql
      
    • Script idempotent (an toàn cho production):
      dotnet ef migrations script --idempotent
      
  6. Xem danh sách Migration:

    dotnet ef migrations list
    

Mẹo sử dụng

  • Đặt tên Migration: Sử dụng tên mô tả như AddUserTable, UpdateProductSchema.
  • Sao lưu: Sao lưu cơ sở dữ liệu trước khi áp dụng migration.
  • Seed dữ liệu:
    modelBuilder.Entity<User>().HasData(new User { Id = 1, Name = "Admin" });
    
  • Tạo script SQL:
    • Dùng dotnet ef migrations script <TênMigrationCũ> <TênMigrationMới> để lấy thay đổi giữa hai migration.
    • Dùng dotnet ef migrations script <MigrationTrước> <MigrationCầnGen> để lấy script cho một migration cụ thể.
    • Lưu script vào file với -o <tên_file>.sql để kiểm tra hoặc triển khai thủ công.
  • Kiểm tra script: Xem trước script SQL để đảm bảo các thay đổi đúng như mong muốn.

Xử lý sự cố

  • Lỗi không tìm thấy Migration: Chạy dotnet build trước.
  • Lỗi chuỗi kết nối: Kiểm tra appsettings.json.
  • Xóa và tạo lại DB:
    dotnet ef database drop
    dotnet ef database update
    

Hỗ trợ các cơ sở dữ liệu

  • SQL Server: Microsoft.EntityFrameworkCore.SqlServer
  • PostgreSQL: Npgsql.EntityFrameworkCore.PostgreSQL
  • SQLite: Microsoft.EntityFrameworkCore.SQLite
  • In-Memory (test): Microsoft.EntityFrameworkCore.InMemory

Tài liệu tham khảo

Bình luận

Bài viết tương tự

- vừa được xem lúc

Migrate PostgreSQL database using pg_dump and pg_restore

Bài toán. . Mình được giao cho 1 việc migrate 1 database từ db_host của infra cũ sang db_host của infra mới. Vấn đề gặp phải.

0 0 12

- vừa được xem lúc

DB MIGRATION FOR GOLANG SERVICES, WHY IT MATTERS?

DB Migration, why it matters. Database migration serves several key purposes:. . Schema Evolution: As applications evolve, their data models change.

0 0 17