[Entity Framework] Phần 5: Tạo mô hình trước (Model First)

997 lượt xem

Một cách tiếp cận khác khi phát triển ứng dụng phần mềm là xây dựng mô hình trước, tạo database và gieo mã nguồn sau. Phương pháp này giúp cho chúng ta nắm và hình dung được mô hình phần mềm ở mức độ tổng quan, từ đó mới phân chia phần mềm thành các phần con và triển khai xây dựng ứng dụng. Thông thường, các ứng dụng có quy mô lớn đến rất lớn sẽ ưu tiên sử dụng phương pháp này. Lý do là ở những ứng dụng này, cái người ta cần là có sự quy hoạch chuẩn xác trên giấy (mô hình) vì quy mô quá lớn thay vì chỉ có tầm nhìn hạn hẹp làm tới đâu biết đến đó với những cách tiếp cận xây dựng phần mềm khác. Đôi khi có những module trùng lặp hoặc có sự kết nối/kế thừa giữa các module trong ứng dụng lớn, mô hình giúp chúng ta hình dung và giải quyết được các vấn đề đó.

Ví dụ xây dựng 1 hệ thống thông tin quản lý điện tử của 1 trường đại học bao gồm các chức năng như tin tức/thông báo, quản lý học phần/điểm, quản lý sinh viên, quản lý cán bộ, quản lý tiền lương cán bộ, quản lý thời khóa biểu, quản lý trung tâm thư viện, quản lý ký túc xá, quản lý nghiên cứu khoa học, quản lý đối tác/cộng tác, quản lý tuyển sinh, … Ở hệ thống này, vì có quá nhiều module cho nên chúng ta không thể xây dựng theo kiểu Code First hay Database First do không thể nắm và tối ưu hết được các công đoạn cần làm. Chẳng hạn, chúng ta xây dựng bảng SinhVien dùng để lưu trữ sinh viên, nếu để ý có thể thấy bảng SinhVien có thể dùng cho các module như: quản lý học phần/điểm, quản lý sinh viên, quản lý thời khóa biểu, quản lý thư viện (mượn trả sách), … Nếu xây dựng phần mềm theo các phương pháp khác, đôi khi chúng ta khó nhìn tổng quan vì vậy có thể tạo bảng SinhVien lặp lại ở nhiều module con.

Model First cho phép bạn tạo 1 mô hình dùng Entity Framework Designer và sau đó gieo lược đồ cơ sở dữ liệu từ mô hình. Mô hình được lưu trữ ở tập tin EDMX (.edmx) và có thể xem, chỉnh sửa ở Entity Framework Designer. Các lớp tương tác với ứng dụng được tự động gieo từ tập tin EDMX.

Tương tự như Database First hay Code First, bạn cần có Visual Studio 2013 để thực hiện ứng dụng. Nếu bạn xài VS 2010 hay VS 2012 bạn cần cài đặt thêm gói NuGet.

1. Tạo ứng dụng
Để các bạn dễ nắm bắt, chúng ta sẽ tạo 1 ứng dụng Console dùng Model First để thực thi truy cập dữ liệu.

Mở Visual Studio, chọn File -> New -> Project…, chọn Visual C# và Console Application, đặt tên ứng dụng là DammioModelFirst, sau đó nhấn OK.

2. Tạo mô hình
Để tạo mô hình cho ứng dụng, chúng ta chọn Project, chuột phải -> Add -> Add New Item…

Tiếp đến bạn chọn mục Data dưới mục Visual C# Items bên menu trái và chọn ADO.NET Entity Data Model, đặc tên mô hình là DammioModel, chọn Empty EF Designer Model (hoặc Empty model) và nhấn Finish để hoàn thành.

Tiếp theo, tập tin DammioModel.edmx được mở ra với 1 mô hình trống. Bây giờ chúng ta sẽ tiếp hành xây dựng mô hình bằng cách thêm mới các thực thể (entity), thuộc tính và các mối quan hệ giữa các thực hiện trong mô hình.

Rê chuột vào vùng trống, chuột phải chọn Properties. Trong cửa sổ Properties, chúng ta có thể thay đổi tên thuộc tính “Entity Container Name” với giá trị là DammioModelContainer thành BloggingContext hay bất cứ tên nào bạn muốn.

Đây là tên context kế thừa từ lớp DbContext sẽ được tự động gieo mã nguồn, context thể hiện 1 phiên làm việc với database, cho phép chúng ta truy vấn và lưu trữ dữ liệu.

Tiếp đến, chúng ta tạo 1 thực thể bằng cách chuột phải lên vùng trống, chọn Add New -> Entity… Đặt tên thực thể là BlogBlogId là khóa chính, sau đó nhấn OK.

Để tạo thêm thuộc tính cho thực thể Blog, chọn thực thể này, chuột phải chọn Add New -> Scalar Property, điền Name là tên thuộc tính.

Chuột phải lên thuộc tính Name, chọn Properties, lúc này chúng ta sẽ có được cửa số Properties cho thuộc tính Name.

Trong cửa sổ Properties của thuộc tính Name, chúng ta có các mục chính sau:

  • Default Value: là giá trị mặc định của thuộc tính, đặt (None) nghĩa là không có giá trị mặc định
  • Entity Key: đặt khóa của thực thể (True/False)
  • Fixed Length: chiều dài cố định của thuộc tính (True/False)
  • Getter/Setter: phạm vi truy cập của 2 thuộc tính Getter/Setter (Public, Protected, Private, Internal)
  • Max Length: chiều dài tối đa
  • Name: tên thuộc tính
  • Nullable: cho phép thuộc tính có dữ liệu null hay không (None/True/False)
  • Type: kiểu dữ liệu của thuộc tính

Chúng ta lặp lại các bước trên cho thuộc tính Url, chuột phải lên thuộc tính Url chọn Properties, đặt thuộc tính NullableTrue để cho phép thêm 1 Blog mới mà không cần phải mô tả giá trị Url.

Chúng ta tạo thêm thực thể Post với PostId là khóa chính và 2 thuộc tính là Title và Content.

Đến đây, chúng ta phải tạo thêm mối quan hệ giữa các bảng trong mô hình. Chuột phải là vùng trống giao diện, chọn Add New -> Association… Khi đó chúng ta sẽ thấy sự xuất hiện của mối quan hệ giữa 2 thực thể vừa tạo.

Diễn giải quan hệ là 1 Blog chứa nhiều Post và 1 Post chỉ thuộc về 1 Blog. Mối quan hệ giữa Blog và Post là 1 (One)* (Many). Chúng ta có thêm 2 thuộc tính điều hướng đó là: Posts và Blog. Hai thuộc tính này giúp lấy được giá trị của thực thể Blog và Post mà không cần truy xuất trực tiếp các thực thể này. Thêm khóa ngoại vào thực thể Post và nhấn dấu check, sau đó nhấn OK để tạo mối quan hệ.

Sau khi tạo xong mối quan hệ, chúng ta có sơ đồ hoàn chỉnh cho ví dụ đơn giản như sau.

3. Gieo cơ sở dữ liệu
Với mô hình cho trước, Entity Framework có thể tính 1 lược đồ database cho phép chúng ta lưu trữ và rút trích dữ liệu bằng mô hình. Tùy theo phiên bản Visual Studio, bạn sẽ tạo database ở những nơi khác nhau.

  • Nếu bạn xài VS 2010, bạn sẽ tạo 1 SQL Express database
  • Nếu bạn xài VS 2012, bạn sẽ tạo 1 LocalDb database.

Tiếp theo, để gieo database, chọn chuột phải lên vùng trống, chọn Generate Database from Model… Chọn New Connection… và đặc tả hệ cơ sở dữ liệu như LocalDb ((localdb)\v11.0) hoặc SQL Express (.\SQLEXPRESS) hay bất cứ hệ cơ sở dữ liệu nào bạn muốn để gieo mô hình. Sau đó, điền tên DammioModelFirst.Blogging là tên cơ sở dữ liệu và nhấn OK.

Tiếp đến bạn chọn phiên bản Entity Framework 6.x và nhấn Next, Finish để gieo database. Nếu database chưa được gieo, các bạn chạy tập tin DammioModelFirst.edmx.sql và nhấn nút Execute (Ctrl + Shift + E) để gieo database nhé.

4. Đọc và ghi dữ liệu
Đến đây, chúng ta sẽ tạo 1 số đoạn mã để tương tác với database thông qua các lớp được gieo dựa trên tập tin EDMX như hình sau.

Sau đó chúng ta thêm đoạn mã sau ở tập tin Program.cs.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DammioModelFirst
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var db = new BloggingContext())
            {
                // Tạo và lưu tên 1 blog mới --- dammio.com
                Console.Write("Nhap ten cho 1 blog moi: ");
                var name = Console.ReadLine();

                var blog = new Blog { Name = name };
                db.Blogs.Add(blog);
                db.SaveChanges();

                // Hiển thị tất cả các blog trong database
                var query = from b in db.Blogs
                            orderby b.Name
                            select b;

                Console.WriteLine("Danh sach cac blog:");
                foreach (var item in query)
                {
                    Console.WriteLine(item.Name);
                }

                Console.WriteLine("Nhan bat ky nut nao de thoat...");
                Console.ReadKey();
            }
        }
    }
}

Sau khi thực thi, một số blog được thêm như sau.

5. Quản lý các thay đổi mô hình
Phần này giúp chúng ta quản lý việc thay đổi trên mô hình. Khi mô hình thay đổi, chúng ta cần phải cập nhật lược đồ database và cũng như gieo lại các lớp code. Thêm 1 thực thể User với Username là khóa với kiểu chuỗi (String).

Chuột phải vào thuộc tính Username, chọn Properties. Trong cửa sổ Properties, chọn MaxLength là 50 để cho phép thuộc tính Username có chiều dài là 50.

Sau đó thêm thuộc tính DisplayName kiểu String vào thực thể User.

Sau khi thay đổi mô hình bằng cách thêm mới 1 thực thể User, chúng ta sẽ tiến hành cập database và gieo lại mã nguồn. Chuột phải vào vùng trống ở giao diện tập tin EDMX, chọn Generate Database from Model…, Entity Framework sẽ gieo 1 đoạn script để tạo lại lược đồ dựa trên mô hình được cập nhật. Sau đó chọn Finish.

Nếu bạn nhận 1 vài cảnh báo về việc ghi đề lên DDL script và ánh xạ, lưu trữ các phần mô hình, hãy cứ nhấn Yes. Sau đó tập tin DammioModel.edmx.sql được gieo lại, bạn nhấn Execute (Ctrl + Shift + E) để gieo mô hình.

Ok vậy là xong phần database, phần mã nguồn bạn chỉ cần lưu tập tin EDMX lại là Visual Studio tự gieo thêm lớp User.cs.

Kết luận: Trong bài này, bạn đã học cách phát triển ứng dụng phần mềm thông qua phương pháp tiếp cận Model First với việc tạo ra 1 mô hình bằng EF Designer, sau đó gieo database và gieo mã nguồn cho dự án phần mềm cũng như cách cập nhật mô hình. Mọi thắc mắc về bài này, xin comment dưới đây các bạn nhé.

Bình luận Facebook

Để lại bình luận

Be the First to Comment!

Notify of
avatar
1000
wpDiscuz