Trang chủ / ASP.NET Core / Thêm một Field mới trong ứng dụng ASP.NET Core đầu tiên

Thêm một Field mới trong ứng dụng ASP.NET Core đầu tiên

Thêm một Field mới trong ứng dụng ASP.NET Core đầu tiên. Trong phần này bạn sẽ sử dụng Entity Framework Code First Migrations để thêm mới một field trong model và thay đổi nó trong cơ sở dữ liệu.

Khi bạn sử dụng EF Code First để tự động tạo ra một cơ sở dữ liệu, Code First thêm một bảng đến cơ sở dữ liệu để giúp theo dõi cơ sở dữ liệu được đồng bộ với các lớp mô hình được tạo ra. Nếu nó không đồng bộ EF sẽ đưa ra một ngoại lệ. Điều này giúp ta dễ dàng hơn để theo dõi các vấn đề trong thời gian phát triển mà bạn thường chỉ tìm thấy tại thời điểm chạy mà thôi

Thêm thuộc tính Rating vào Model Movie

Giờ bạn hãy tiến hành mở Model movie trong Models/Movie.cs và thêm thuộc tính Rating vào:

them mot filed trong ung dung asp.net core dau tien - Ảnh 1
Thêm một field trong ứng dụng asp.net core đầu tiên – Ảnh 1

Tiến hành Build ứng dụng, có thể dùng tổ hợp phím Ctrl + Shift + B cho nhanh

Giờ bạn cần phải làm 2 việc để hiển thị thuộc tính Rating lên website của bạn. Đó là cập nhật controller và view Movie của bạn.

Cập nhật lại Controller và View

Bạn phải cập nhật controller vì bạn bạn vừa thêm một filed mới trong lớp Movie, vì thế bạn cũng cần cập nhật nó vào danh sách binding của bạn. Đơn giản thôi, bạn chỉ cần cập nhật thuộc tính [Bind] trong phương thức CreateEdit tức là thêm thuộc tính Rating của bạn vào mà thôi

Và dĩ nhiên bạn cũng phải cập nhật vào View để nó có thể hiển thị nữa

Chỉnh sửa tập tin Index.cshtml trong /Views/Movies/Index  và thêm Field Rating vào.

Chỉnh sửa tập tin Index để thêm một filed vào
Chỉnh sửa tập tin Index để thêm một filed vào

Bạn cũng cần cập nhật Create.cshtml của bạn nữa, bạn có thể thêm vào như sau:

Chỉnh sửa tập tin Create để thêm filed Rating
Chỉnh sửa tập tin Create để thêm filed Rating

Tuy nhiên, ứng dụng của bạn với đường link http://localhost:xxxx/movies sẽ không thể nào chạy được vì bạn đã thêm một trường mới nhưng lại chưa cập nhật database của bạn. Nhưng nếu bạn muốn nó chạy luôn bạn có thêm vào một SqlException.

Không truy cập được phim khi thêm một field mới
Không truy cập được phim khi thêm một field mới

Bạn thấy lỗi này bởi vì lớp model của bạn khác hơn so với cơ sở dữ liệu, dễ hiểu hơn là bạn chưa có cột Rating trong bảng cơ sở dữ liệu

Các cách để giải quyết nó như sau:

Cách 1: Sử dụng chức năng tự động của Entity Framework để drop và re-create cơ sở dữ liệu của bạn, khi đó nó sẽ tự động thêm các model mới vào cơ sở dữ liệu. Cách này là rất thuận tiện cho bạn và cho phép bạn nhanh chóng tạo ra cơ sở dữ liệu tương ứng với model của bạn. Tuy nhiên cái nào cũng có giá của nó, bạn sẽ bị mất các cơ sở dữ liệu hiện có trong cơ sở dữ liệu của bạn – do đó bạn không nên sử dụng phương pháp này khi dùng cho cơ sở dữ liệu đã xuất bản ra rồi. Bạn có thể khởi tạo dữ liệu mẫu để tự động tạo ra một cơ sở dữ liệu với dữ liệu được kiểm tra thường xuyên là một cách để phát triển ứng dụng của bạn.

Cách 2: Thay đổi cơ sở dữ liệu hiện có để phù hợp với model của bạn. Ưu điểm của phương pháp này sẽ giúp bạn giữ lại cơ sở dữ liệu cho bạn. Bạn có thể thực hiện thay đổi này bằng tay hoặc bằng script để thay đổi.

Cách 3: Sử dụng Code First Migrations để cập nhật lại cơ sở dữ liệu cho bạn. Và mình sẽ sử dụng cách để hướng dẫn cho bạn.

Cập nhật lại class SeedData của bạn để thêm một cột mới. Dưới đây là một ví dụ thay đổi của mình, bạn sẽ tự làm với tất cả các phim còn lại

Build ứng dụng và nếu bạn thích sử dụng  command prompt bạn nhập các lệnh sau:

Còn nếu bạn sử dụng Console trong Visual bạn có thể nhập

Bạn phải tắt IIS trước khi nhập các command bên trước, Cách tắt mình đã chỉ từ bài trước rồi. Nếu bạn quên có thể xem lại tại đây

Lúc này cơ sở dữ liệu của bạn đã được tạo mới và có trường Rating

Nếu bạn xóa tất cả các bản ghi trong cơ sở dữ liệu. Thì sẽ luôn có một khởi tạo sẽ giống với cơ sở dữ liệu được tao ra bao gồm trường Rating trong đó. Chạy ứng dụng của bạn và bây giờ bạn có thể tạo được các phim có trường đánh giá trong đó. Và bạn tự bổ sung trường đánh giá vào Edit, Detail, và Delete nhé.

Link tải source code: Google Drive

 

Series Navigation<< Thêm Search trong ứng dụng ASP.NET Core MVC đầu tiên

Thông tin Nguyễn An Hoàng Nguyên

Đam mê về lập trình, thích viết lách. Có hứng thú với thương mại điện tử và kinh doanh

Check Also

widget trong template này

Generic Repository Pattern là gì ? Cách sử dụng trong ASP.NET Core

Cũng đã gần 3 tháng mình mới viết bài mới. 3 tháng trước mình đã …

Trả lời

Thư điện tử của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *