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>

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s