ASP.NET Core: Tổng quan về Migration


Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên

Trong các dự án trong thế giới thực, các mô hình dữ liệu thay đổi khi các tính năng được triển khai: các thực thể hoặc thuộc tính mới được thêm và xóa và các lược đồ cơ sở dữ liệu cần được thay đổi tương ứng để được đồng bộ hóa với ứng dụng. Tính năng migration trong EF Core cung cấp một cách để cập nhật dần lược đồ cơ sở dữ liệu nhằm giữ cho lược đồ đó đồng bộ với mô hình dữ liệu của ứng dụng trong khi vẫn bảo toàn dữ liệu hiện có trong cơ sở dữ liệu.

Ở cấp độ cao, quá trình migration hoạt động theo cách sau:

  • Khi thay đổi mô hình dữ liệu được đưa ra, nhà phát triển sử dụng các công cụ của EF Core để thêm một quá trình migration tương ứng mô tả các bản cập nhật cần thiết để giữ cho lược đồ cơ sở dữ liệu được đồng bộ hóa. EF Core so sánh mô hình hiện tại với ảnh chụp nhanh của mô hình cũ để xác định sự khác biệt và tạo các tệp nguồn migration; các tệp có thể được theo dõi trong kiểm soát nguồn dự án của bạn giống như bất kỳ tệp nguồn nào khác.
  • Khi một lần migration mới đã được tạo, nó có thể được áp dụng cho cơ sở dữ liệu theo nhiều cách khác nhau. EF Core ghi lại tất cả các lần migration đã áp dụng trong một bảng lịch sử đặc biệt, cho phép nó biết lần migration nào đã được áp dụng và lần migration nào chưa.

Phần tiếp theo của bài viết này là hướng dẫn từng bước cho người mới bắt đầu sử dụng migration. Tham khảo các bài viết khác trong phần này để có thêm thông tin chi tiết.

Bắt đầu

Giả sử bạn vừa hoàn thành ứng dụng EF Core đầu tiên của mình, ứng dụng này chứa mô hình đơn giản sau:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
}

Trong quá trình phát triển, bạn có thể đã sử dụng API Create and Drop để lặp lại nhanh chóng, thay đổi mô hình của mình khi cần; nhưng bây giờ ứng dụng của bạn sẽ được đưa vào sản xuất, bạn cần một cách để phát triển lược đồ một cách an toàn mà không làm mất toàn bộ cơ sở dữ liệu.

Cài đặt các công cụ

Trước tiên, bạn sẽ phải cài đặt các công cụ dòng lệnh của EF Core:

Tạo migration đầu tiên của bạn

Bây giờ bạn đã sẵn sàng để thêm migration đầu tiên của mình! Hướng dẫn EF Core nay tạo một migration có tên là InitialCreate:

Với ASP.NET Core:

dotnet ef migrations add InitialCreate

Với Visual Studio:

Add-Migration InitialCreate

EF Core sẽ tạo một thư mục có tên là Migrations trong dự án của bạn và tạo một số tệp. Bạn nên kiểm tra chính xác những gì EF Core đã tạo ra - và có thể sửa đổi nó - nhưng bây giờ chúng ta sẽ bỏ qua phần đó.

Tạo cơ sở dữ liệu và lược đồ của bạn

Tại thời điểm này, bạn có thể yêu cầu EF tạo cơ sở dữ liệu của mình và tạo lược đồ của bạn từ quá trình migration. Điều này có thể được thực hiện thông qua lệnh sau:

Với ASP.NET Core:

dotnet ef database update

Với Visual Studio:

Update-Database

Đó là tất cả những gì cần làm - ứng dụng của bạn đã sẵn sàng để chạy trên cơ sở dữ liệu mới của bạn và bạn không cần phải viết một dòng SQL nào. Lưu ý rằng cách áp dụng migration này lý tưởng cho sự phát triển cục bộ nhưng ít phù hợp hơn với môi trường production - xem trang Áp dụng Migration để biết thêm thông tin.

Phát triển mô hình của bạn

Một vài ngày đã trôi qua và bạn được yêu cầu thêm dấu thời gian tạo vào blog của mình. Bạn đã thực hiện các thay đổi cần thiết cho ứng dụng của mình và mô hình của bạn bây giờ trông như thế này:

public class Blog
{
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime CreatedTimestamp { get; set; }
}

Mô hình của bạn và cơ sở dữ liệu production của bạn hiện không đồng bộ - chúng tôi phải thêm một cột mới vào lược đồ cơ sở dữ liệu của bạn. Hãy tạo một migration mới cho việc này:

Với ASP.NET Core:

dotnet ef migrations add AddBlogCreatedTimestamp

Với Visual Studio:

Add-Migration AddBlogCreatedTimestamp

Lưu ý rằng chúng tôi cung cấp cho quá trình migration một tên mô tả để dễ hiểu lịch sử dự án sau này.

Vì đây không phải là lần migration đầu tiên của dự án, EF Core hiện so sánh mô hình được cập nhật của bạn với ảnh chụp nhanh của mô hình cũ, trước khi cột được thêm vào; ảnh chụp nhanh mô hình là một trong những tệp được tạo bởi EF Core khi bạn thêm một lần migration và được kiểm tra trong kiểm soát nguồn. Dựa trên sự so sánh đó, EF Core phát hiện ra rằng một cột đã được thêm vào và thêm phần migration thích hợp.

Bây giờ bạn có thể áp dụng migration của mình như trước đây:

Với ASP.NET Core:

dotnet ef database update

Với Visual Studio:

Update-Database

Lưu ý rằng lần này, EF phát hiện ra rằng cơ sở dữ liệu đã tồn tại. Ngoài ra, khi lần migration đầu tiên của chúng tôi được áp dụng ở trên, thực tế này đã được ghi lại trong bảng lịch sử migration đặc biệt trong cơ sở dữ liệu của bạn; điều này cho phép EF chỉ tự động áp dụng migration mới.

Loại trừ các bộ phận của mô hình của bạn

Đôi khi bạn có thể muốn tham khảo các kiểu từ một DbContext khác. Điều này có thể dẫn đến xung đột migration. Để ngăn chặn điều này, hãy loại trừ loại khỏi quá trình migration của một trong các DbContext.

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    modelBuilder.Entity<IdentityUser>()
        .ToTable("AspNetUsers", t => t.ExcludeFromMigrations());
}

Bước tiếp theo

Trên đây chỉ là phần giới thiệu ngắn gọn về migration. Vui lòng tham khảo các trang tài liệu khác để tìm hiểu thêm về quản lý migrationáp dụng chúng và các khía cạnh khác. Tham chiếu công cụ .NET Core CLI cũng chứa thông tin hữu ích về các lệnh khác nhau

Tài nguyên bổ sung

Nguồn: learn.microsoft.com
» Tiếp: Bắt đầu với ASP.NET Core SignalR
« Trước: Mở rộng quy mô ứng dụng trong App Service Azure
Khóa học qua video:
Lập trình Python All Lập trình C# All SQL Server All Lập trình C All Java PHP HTML5-CSS3-JavaScript
Đăng ký Hội viên
Tất cả các video dành cho hội viên
Copied !!!