Multi-Migrations – ASP.NET MVC 5 Entity Framework 6

Multi-Migrations – ASP.NET MVC 5 Entity Framework 6

Hi các bạn,

Với tính năng Migrations cũng như Laravel, chúng ta sẽ tạo ra database hoặc update database, cùng với đó là seed(insert) 1 số row lên table nếu muốn.

Và ở Entities Framework 6 chúng ta đã có thể sử dụng Multi-Migrations.

Để thực hiện Migrations, các bạn cần tạo class Table đầy đủ (Xem tại: http://sethphat.com/sp-380/dinh-nghia-table-trong-asp-net-mvc-5)

Mình sẽ thực hiện Step-by-step về hướng dẫn vụ này.

1/ Tạo DbContexts

Đây là 1 class quan trọng để ta có thể lấy dữ liệu cũng như sử dụng. Chúng ta sẽ có 2 hướng để tạo:

  1. Tạo ngay trong Models.
  2. Tạo thư mục mới đặt tên là DataContexts.

Mình thì dùng cách 2, nhưng cách nào nó cũng như nhau thôi 😀

Theo như bài trước, thì mình đã tạo dc class Movie, giờ mình sẽ tiếp tục tạo DbContext cho Movie, cụ thể:

Tạo class MovieDB:

    public class MovieDB : DbContext
    {
        public DbSet<Movie> Movies { get; set; }

        public MovieDB() : base("DefaultConnection")
        {

        }
    }

Và chỉ đơn giản như vậy thôi, ta đã có thể có 1 class để truy xuất dữ liệu sau này.

Tại sao base lại có giá trị như vậy? Bạn hãy vào Models/IdentityModels sẽ thấy class ApplicationContext.

Và base ở đây là hướng tới 1 connect string, cụ thể là dc define dưới “DefaultConnection”.

Ta vào ngay web.config sẽ thấy cụ thể dòng như sau:

<add name="DefaultConnection" connectionString="..." providerName="System.Data.SqlClient" />

Và chính ở đây, ta sẽ set Connection String cho project của chúng ta luôn.

VD đối với mình đã tạo database trong SQL Server, mình sẽ có connectionString là:

Data Source=.\SQLEXPRESS;Initial Catalog=dbPhim;Integrated Security=True

Và sửa lại hoàn chỉnh DefaultConnection:

<add name="DefaultConnection" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=dbPhim;Integrated Security=True"
      providerName="System.Data.SqlClient" />

Mục đích của việc này là:

  1. Set cụ thể sử dụng DB/Server nào.
  2. Dùng chung 1 phương thức kết nối cho toàn bộ Contexts(Vd nếu 2 connectionString khác nhau sẽ ko join dc 2 table).
  3. Dễ dàng quản lý và sửa đổi trong tương lai.

(Optional) Nếu bạn có tạo MVC Project có Authenticate

Đây là 1 phần ngoài lề, nhưng mình thấy khá là hay vì mình có thể quản lý dễ dàng hơn.

Cụ thể trong thư mục DataContexts, mình sẽ tạo thêm 1 class là IdentityDB.

Và khi nãy bạn nhớ ta có vào xem class ApplicationContext ko, chúng ta sẽ cut class đó qua đây, và sửa lại tên class

Multi-Migrations - ASP.NET MVC 5 Entities Framework 6Sau đó hãy Rebuild lại, ta sẽ gặp vài lỗi, chỉ cần click lỗi và vào đổi tên ApplicationContext thành IdentityDB và using cái DataContexts là dc 😀

2/ Multi-Migrations – ASP.NET MVC 5 Entity Framework 6

Ở đây ta sẽ cần dùng tới Package Console, các bạn có thể search để tìm:

Multi-Migrations - ASP.NET MVC 5 Entities Framework 61/ Bật Migrations

Khi bật lên, nhìn ngay bên dưới, ta sẽ nhập lệnh này để bật migration:

enable-migrations

Hiện tại nó sẽ báo đỏ vì chúng ta có đến 2 model cần migrations (Movie và Identity).

Vậy nên ta sẽ enable-migrations cho cả 2 với lệnh sau:

enable-migrations -ContextTypeName <tên_class_contexts> -MigrationsDirectory <folder_để_tạo_migrations>

enable-migrations -ContextTypeName IdentityDB -MigrationsDirectory DataContexts\IdentityMigrations
enable-migrations -ContextTypeName MovieDB -MigrationsDirectory DataContexts\MovieMigrations

Vì Entity 6 đã hỗ trợ migration ở thư mục ta muốn, nên ta sẽ bỏ chung vào DataContexts luôn với param -MigrationDirectory.

Sau khi chạy xong bạn sẽ có dc 2 file Configuration. Hiện tại chúng ta ko cần seed gì nên khỏi fải quan tâm tới 😀

2/ Thêm Migrations

Chúng ta sẽ tiếp tục thực hiện add-migration thông qua lệnh:

add-migration -ConfigurationTypeName <path_của_folder_migration_configuration> “Tên muốn đặt”

add-migration -ConfigurationTypeName MVCPhim.DataContexts.IdentityMigrations.Configuration "InitialCreate"
add-migration -ConfigurationTypeName MVCPhim.DataContexts.MovieMigrations.Configuration "InitialCreate"

Khi chạy xong ta sẽ thấy dc 2 file, sẽ có các hàm như create table, bên trong có column các kiểu. Nếu vậy bạn đã làm đúng tới bước hiện tại 😀

3/ Thực hiện Migrations

Cụ thể là ta sẽ update-database như sau:

update-database -ConfigurationTypeName <path_của_folder_migration_configuration>

update-database -ConfigurationTypeName MVCPhim.DataContexts.IdentityMigrations.Configuration
update-database -ConfigurationTypeName MVCPhim.DataContexts.MovieMigrations.Configuration

Vậy thôi thì ta đã tạo ra được table và migrate nó. Chúng ta có thể vào SQL Server để check :D.

Các bạn vừa đã hoàn thành xong bài Multi-Migrations – ASP.NET MVC 5 Entity Framework 6.

Cám ơn các bạn đã quan tâm!

facebook
Seth Phát

Seth Phát

Mình là Phát - biệt danh Seth Phát. Hiện đang là một Sr. Full-Stack Engineer. Mình là một người yêu thích và đam mê lập trình và hiện tại đang theo về phần Web là chủ yếu. Mạnh Back-end và khá Front-end, vẫn đang theo đều cả 2 :v. Còn gì bằng khi được làm những thứ mà mình yêu thích, đam mê ;)

One thought on “Multi-Migrations – ASP.NET MVC 5 Entity Framework 6

Comments are closed.

Bình luận qua Facebook