Asides

Entity Framework – Entity Data Model là gì?

Chào các bạn, bài viết trước chúng ta đã hiểu cơ bản Entity Framework là gì? Ở bài viết này chúng ta sẽ tìm hiểu một thành phần quan trọng của Entity Framework đó là “Entity Data Model (EDM)“.

Entity Data Model là gì?
EDM là một tập các Business objects bao gồm 3 thành phần:

  • Conceptual Model.
  • Mapping Model.
  • Storage Model.

EDM là cầu nối giữa application của bạn và Relational Database. EDM giúp bạn thao tác (connect, Add, Update, Delete) với database qua các objects được Entity Framework sinh ra mà không cần  viết các câu lệnh SQL để thao tác trực tiếp với Relational Database. Nhờ có EDM mà các Business objects được sinh ra trong ứng dụng và  Relational Database hiểu được nhau.

Entity Data Model

ADO.NET Entity Framework sử dụng XML based Data Definition Language gọi là Schema Definition Language (SDL) để định nghĩa EDM Schema.

  • SDL bao gồm các kiểu dữ liệu nguyên thủy như String, Int32, Double, Decimal, and DateTime.
  • Với kiểu dữ liệu đơn giản, nó định nghĩa thành từng cặp name và value của kiểu dữ liệu nguyên thủy.
  • Với kiểu dữ liệu phức tạp, là tập hợp của các kiểu dữ liệu khác. Kiểu dữ liệu này được gọi là Entity Type.

The Entity Data Model dùng 3 thuộc tính để mô tả cấu trúc của một EDM.

  • Entity type
  • Association type
  • Property

Ví dụ: Dưới đây là 1 ví dụ về SDL

<?xml version=”1.0″ encoding=”UTF-8″?>
<Schema xmlns=”http://schemas.microsoft.com/ado/2008/09/edm&#8221; xmlns:cg=”http://schemas.microsoft.com/ado/2006/04/codegeneration&#8221; xmlns:store=”http://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator&#8221; Namespace=”BooksModel” Alias=”Self”>
<EntityType Name=”Book”>
<Key>
<PropertyRef Name=”ISBN” />
</Key>
<Property Type=”String” Name=”ISBN” Nullable=”false” />
<Property Type=”String” Name=”Title” Nullable=”false” />
<Property Type=”Decimal” Name=”Revision” Nullable=”false” Precision=”29″ Scale=”29″ />
<NavigationProperty Name=”Publisher” Relationship=”BooksModel.PublishedBy” FromRole=”Book” ToRole=”Publisher” />
<NavigationProperty Name=”Authors” Relationship=”BooksModel.WrittenBy” FromRole=”Book” ToRole=”Author” />
</EntityType>
<EntityType Name=”Publisher”>
<Key>
<PropertyRef Name=”Id” />
</Key>
<Property Type=”Int32″ Name=”Id” Nullable=”false” />
<Property Type=”String” Name=”Name” Nullable=”false” />
<Property Type=”String” Name=”Address” Nullable=”false” />
<NavigationProperty Name=”Books” Relationship=”BooksModel.PublishedBy” FromRole=”Publisher” ToRole=”Book” />
</EntityType>
<EntityType Name=”Author”>
<Key>
<PropertyRef Name=”Name” />
<PropertyRef Name=”Address” />
</Key>
<Property Type=”String” Name=”Name” Nullable=”false” />
<Property Type=”String” Name=”Address” Nullable=”false” />
<NavigationProperty Name=”Books” Relationship=”BooksModel.WrittenBy” FromRole=”Author” ToRole=”Book” />
</EntityType>
<Association Name=”PublishedBy”>
<End Type=”BooksModel.Book” Role=”Book” Multiplicity=”*” />
<End Type=”BooksModel.Publisher” Role=”Publisher” Multiplicity=”1″ />
</Association>
<Association Name=”WrittenBy”>
<End Type=”BooksModel.Book” Role=”Book” Multiplicity=”*” />
<End Type=”BooksModel.Author” Role=”Author” Multiplicity=”*” />
</Association>
</Schema>