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
-
Thiết lập DbContext: Trong
Program.cs
:builder.Services.AddDbContext<YourDbContext>(options => options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")));
-
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
.
-
Tạo Migration:
dotnet ef migrations add <TênMigration>
Ví dụ:
dotnet ef migrations add InitialCreate
-
Áp dụng Migration:
dotnet ef database update
-
Hoàn tác Migration:
dotnet ef database update <TênMigrationTrước>
-
Xóa Migration chưa áp dụng:
dotnet ef migrations remove
-
Tạo Script SQL:
- Script cho toàn bộ migration:
dotnet ef migrations script
- Script giữa hai migration:
Ví dụ:dotnet ef migrations script <TênMigrationCũ> <TênMigrationMới>
dotnet ef migrations script InitialCreate 20231010120000_UpdateUserTable
- Script cho một migration cụ thể:
Ví dụ:dotnet ef migrations script <MigrationTrước> <MigrationCầnGen>
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
- Script cho toàn bộ migration:
-
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.
- Dù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