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

Model first là gì

Một cách tiếp cận khác khi phát triển các ứng dụng phần mềm là xây dựng mô hình trước, sau đó tạo cơ sở dữ liệu và điền mã . Cách tiếp cận này giúp chúng ta nắm bắt và hình dung mô hình phần mềm ở mức tổng quan, sau đó chia phần mềm thành các tiểu mục và triển khai, xây dựng ứng dụng. Thông thường, các ứng dụng lớn sẽ thích cách tiếp cận này hơn. Lý do là, trong các ứng dụng này, điều cần thiết là lập kế hoạch chính xác trên giấy (mô hình) vì quy mô quá lớn, chứ không chỉ là tầm nhìn hạn hẹp, cách tiếp cận xây dựng phần mềm khác. Đôi khi trong các ứng dụng lớn có các mô-đun trùng lặp hoặc kết nối / kế thừa giữa các mô-đun, mô hình này có thể giúp chúng ta hình dung và giải quyết những vấn đề này.

Ví dụ: để xây dựng hệ thống thông tin quản lý điện tử của trường đại học, bao gồm tin tức / thông báo, quản lý khóa học / cấp học, quản lý sinh viên, quản lý giảng viên, quản lý lương giảng viên, quản lý lịch biểu, quản lý trung tâm thư viện, quản lý ký túc xá, nghiên cứu khoa học và các chức năng khác quản lý, quản lý đối tác / cộng tác, quản lý tuyển sinh, … Trong hệ thống, do có quá nhiều phân hệ nên chúng tôi không thể xây dựng mã trước hoặc xây dựng cơ sở dữ liệu trước, vì chúng tôi không thể hiểu và tối ưu hóa tất cả các bước chúng tôi. cần phải làm điều đó. Ví dụ, chúng tôi xây dựng bảng sinhvien để lưu trữ sinh viên, nếu để ý bạn có thể thấy bảng sinh viên có thể dùng cho các học phần như: quản lý khóa học / điểm, quản lý sinh viên, quản lý lịch học, thư viện quản lý (mượn, trả sách),… nếu chúng ta xây dựng phần mềm theo cách khác thì đôi khi khó có cái nhìn tổng quan, có thể tạo bảng sinh viên trùng lặp ở nhiều mô-đun con. .

trước tiên, mô hình cho phép bạn tạo mô hình bằng cách sử dụng Trình thiết kế khung thực thể và sau đó tạo sơ đồ cơ sở dữ liệu từ mô hình. Mô hình được lưu trữ trong tệp edmx (.edmx), tệp này có thể được xem và chỉnh sửa trong Trình thiết kế khung thực thể. Các lớp tương tác ứng dụng được tự động gieo từ tệp edmx.

Tương tự như cơ sở dữ liệu ưu tiên hoặc mã ưu tiên, bạn cần visual studio 2013 để thực thi ứng dụng. Nếu bạn sử dụng so với năm 2010 hoặc so với năm 2012, bạn cần cài đặt gói bổ sung nuget .

1. Tạo ứng dụng Để thuận tiện cho bạn, chúng tôi sẽ tạo một ứng dụng bảng điều khiển sử dụng mô hình đầu tiên để 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 dammiomodel.edmx sẽ mở ra một mô hình trống. Bây giờ chúng ta sẽ tiếp tục và xây dựng mô hình bằng cách thêm các thực thể, thuộc tính và mối quan hệ mới giữa các triển khai 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 theo, chúng tôi tạo một thực thể bằng cách nhấp chuột phải vào không gian trống và chọn thêm mới ->. entity… Đặt tên cho các đối tượng là blog blogid làm khóa chính và 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ổ thuộc tính của thuộc tính name, chúng tôi có các mục chính sau:

  • giá trị mặc định: là giá trị mặc định của thuộc tính, set (none) có nghĩa là không có giá trị mặc định
  • khóa thực thể: đặt khóa của thực thể (true / false)
  • fixed length: độ dài cố định của thuộc tính (true / false)
  • getter / setter: phạm vi truy cập của hai 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 rỗng (không có) / true / false)
  • type: kiểu dữ liệu thuộc tính
  • li>

Chúng tôi lặp lại các bước trên cho thuộc tính url , nhấp chuột phải vào thuộc tính url và chọn thuộc tính, đặt thuộc tính nullable thành true để cho phép thêm Blog mới mà không cần 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.

Tại thời điểm 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. Nhấp chuột phải vào vùng trống của giao diện và chọn Thêm ->; Liên kết … Sau đó, chúng ta sẽ xem mối quan hệ giữa hai thực thể mới tạo sẽ như thế nào.

Giải thích mối quan hệ là 1 blog có nhiều bài đăng và 1 bài đăng chỉ thuộc về 1 blog. Mối quan hệ giữa blog và bài đăng là 1 (một) * (nhiều) . Chúng tôi cũng có 2 thuộc tính điều hướng: Bài đăng và Blog. Hai thuộc tính này giúp lấy giá trị của các thực thể blog và bài đăng 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ể xuất bản và nhấn dấu kiểm, sau đó nhấn OK để tạo mối quan hệ.

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

3. Việc đưa vào cơ sở dữ liệu một mô hình nhất định cho phép Entity Framework tính toán lược đồ cơ sở dữ liệu cho phép chúng tôi lưu trữ và trích xuất dữ liệu bằng mô hình đó. Tùy thuộc vào phiên bản studio trực quan, bạn sẽ tạo cơ sở dữ liệu ở những nơi khác nhau.

  • Nếu sử dụng so với 2010, bạn sẽ tạo 1 cơ sở dữ liệu sql express
  • Nếu sử dụng so với 2012, bạn sẽ tạo 1 localdb Cơ sở dữ liệu .

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 tôi thêm mã sau vào program.cs .

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 thuộc loại Chuỗi vào thực thể Người dùng.

Sau khi thay đổi mô hình bằng cách thêm một thực thể người dùng mới, chúng tôi sẽ tiến hành cập nhật cơ sở dữ liệu và tạo lại mã nguồn. Nhấp chuột phải vào khoảng trống của giao diện tệp edmx và chọn tạo cơ sở dữ liệu từ mô hình… , Entity Framework sẽ tạo tập lệnh và tạo lại lược đồ dựa trên mô hình đã cập nhật. Sau đó chọn Xong.

Nếu bạn nhận được một số cảnh báo về việc ghi tiêu đề vào tập lệnh ddl và ánh xạ và lưu trữ các bộ phận của mô hình, chỉ cần nhấn có. Sau đó, tệp dammiomodel.edmx.sql được gửi lại và bạn nhấn thực thi (ctrl + shift + e) ​​để bắt đầu mô hình.

Ok, đây là phần cơ sở dữ liệu, bạn chỉ cần lưu mã nguồn của file edmx là visual studio tự chơi user.cs.

Kết luận : Trong bài học này, bạn đã học cách phát triển các ứng dụng phần mềm bằng cách sử dụng phương pháp model-first để tạo mô hình bằng ef designer , Sau đó seed cơ sở dữ liệu và seed mã nguồn của dự án phần mềm và cách cập nhật mô hình. Nếu bạn có thắc mắc gì về bài viết này, hãy comment bên dưới.