Thiết kế Entity Data Model – Part 2: Model First

Tiếp theo phần 1 về Databate First, bài viết này sẽ trình bày về cách tạo Entity Data Model (EDM) theo hướng Model First.

Dựa vào tính năng này, bạn có thể thiết kế được một database thông qua giao diện trực quan của Entity Data Model Designer trong Visual Studio. 

Việc thiết kế EDM theo hướng Model First có thể coi là một bài tập tạo một EDM thủ công bằng công cụ Entity Data Model Designer. Việc thiết kế bằng công cụ không khó nếu như bạn đã quen thuộc với Visual Studio và từng làm việc các loại database.

Đầu tiên, bạn cần thêm một phần tử ADO.NET Entity Data Model vào dự án (Add New Item…). Trong cửa sổ Entity Data Model Wizard hiện ra, chọn Empty model, sau đó nhấn Finish.

Sau khi thêm vào, tập tin .edmx sẽ được thêm vào trong Solution Explorer và tự động được mở ra với công cụ Entity Data Model Designer. Tuy nhiên bởi vì là một model rỗng, bạn cần dùng các mục trong Toolbox hoặc menu ngữ cảnh để tạo ra các entity và mối liên hệ giữa chúng.

Trong ví dụ này tôi tạo ba entity là: Person, Author Book. Ngoài ra tôi tạo thêm một complex type là PersonInfo với hai property là Address và Phone đều có kiểu dữ liệu là String.

Nếu bạn cảm thấy khó khăn khi làm quen với Entity Data Model Designer, hãy đọc một số hướng dẫn dưới đây.

–      Tạo một complex type bằng cách nhấn phải vào vùng trống chọn Add>Complex Type. Một mục mới sẽ được thêm vào trong mục Complex Types ở cửa sổ Model Browser. Hãy đặt tên cho complex type này và nhấn phải vào đó thể thêm các property cần thiết.

–      Để thêm một property vào entity, nhấn phải vào entity chọn Add>Scalar Property hoặc Add>Complex Property. Sau đó bạn có thể chọn kiểu dữ liệu trong cửa sổ Properties.

–      Tạo mối liên hệ (relationship) giữa các entity bằng cách dùng Association trên Toolbox hoặc nhấn phải vào entity chọn Add>Association. Sau khi tạo, hai navigation property tương ứng sẽ xuất hiện trong mỗi entity. Các navigation property này giúp cho các đối tượng entity có tham chiếu đến nhau dễ dàng hơn trong quá trình sử dụng.

–      Việc tạo một mối liên hệ thừa kế (inheritance) tương tự như tạo association. Khi tạo một thừa kế (inheritance) giữa hai entity, entity con sẽ được thừa hưởng tất cả property của entity cha. Điều này tương ứng với mối quan hệ 1-1 trong database.

Sau khi tạo, tôi có được một model như sau:

 

Tạo database từ Entity Data Model

Sau khi hoàn thành việc thiết kế model (tập tin .edmx), bạn hãy nhấn phải vào vùng trống của Entity Data Model Designer và chọn Generate Database from Model… Trong cửa sổ Generate Database Wizard hiện ra, bạn có thể lựa chọn một database có sẵn để thêm các table mới vào. Tuy nhiên tôi sẽ tạo ra một database mới bằng cách nhấn vào New Connection. Trong cửa sổ Connection Properties, tôi sử dụng Data source là Microsoft SQL Server, chọn Server name và nhập database name bất kì, ở đây tôi đặt là Test. Nhấn OK.


Bởi vì server tôi chọn chưa có database Test, một hộp thoại xác nhận hiện ra yêu cầu tạo database này. Hãy nhấn OK để tiếp tục.

Trong cửa sổ wizard, nhấn Next và bạn sẽ thấy các mã DDL sẽ được tạo ra và lưu trong tập tin Model1.edmx.sql. Nhấn Finish và tập tin .sql này sẽ được mở ra. Bạn có thể thấy rằng các tên table sắp được tạo ra được tự động chuyển về dạng số nhiều dựa vào tên của entity. Trong trường hợp này là entity Person sẽ được chuyển thành table People.

Bạn có thể chỉnh sửa lại nội dung để phù hợp hơn. Tuy nhiên, bạn cũng cần phải sửa lại các ánh xạ trong tập tin .edmx cho phù hợp. Nếu không cần thiết, bạn hãy bỏ qua việc chỉnh sửa này.

Ví dụ tôi sửa tên các field của table People là Info_Address thành Address và Info_Phone thành Phone. Sau đó mở tập tin .edmx với XML Editor và chỉnh sửa lại các tên này tương ứng như trên. Có thể sử dụng chức năng Find and Replace.

Sau khi chỉnh sửa, hãy kiểm tra lại nội dung của nó bằng cách dùng chức năng Validate SQL Syntax. Nếu chưa kết nối, cửa sổ Connect to Database Engine của SQL Server sẽ hiện ra để yêu cầu kết nối. Nhấn Connect để tiếp tục.

Sau khi kết nối, các mã sql của tập tin này sẽ được thực thi bằng cách nhấn phải vào cửa sổ soạn thảo hiện tại chọn Execute SQL. Nếu thấy thông điệp “Command(s) completed successfully.” hiện ra ở cửa sổ bên dưới là đã thành công.

Bạn có thể mở SQL Management Studio lên để kiểm tra database này, mô hình của database này có dạng như hình dưới.

 

Kiểm tra kết quả: Thêm dữ liệu vào table People

Mở tập tin App.Config bạn có thể thấy chuỗi kết nối được thêm vào với tên mặc định trùng với tên của lớp context là Model1Container (thừa kế từ ObjectContext). Ta sẽ tạo một thể hiện của Model1Container để thêm một đối tượng Author vào database.

Vì Author được thừa kế từ Person, Model1Container chỉ cung cấp duy nhất một phương thức

static void Main(string[] args)

{

    Model1Container db = new Model1Container();

    PersonInfo info=new PersonInfo(){ Address="123 HCM City", Phone="00-123-456"};

    Author a = new Author() {Name="Yin Yang", Email = "yinyang.itATgmailDOTcom" };

    a.Info = info;

    db.AddToPeople(a);

    db.SaveChanges();

    Console.WriteLine("Entity has been inserted to the database.");

    Console.Read();

}

Mặc dù chỉ thêm một đối tượng Author, nhưng dữ liệu sẽ được phân chia vào hai table là People và People_Author trong database. Có thể coi việc tạo hai entity Person và Author là không cần thiết và có thể nhập lại thành một. Việc tách ra hai entity thế này chỉ cần khi bạn có nhiều entity cùng thừa kế. Kết quả trong database sau khi chạy ví dụ trên:

Mời các bạn xem bài tiếp theo Thiết kế Entity Data Model – Part 3: Code First

Tags: