Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.81 MB, 76 trang )
A.
Application
Application (ứng dụng) là tầng chứa giao diện trang Web (HTML, CSS,
Javascript, hình ảnh, …) và các đoạn mã nguồn (C#, VB) để tương tác dữ liệu với các
tầng khác trong mơ hình thơng qua Object Services.
B.
Object Services
Object Services (tạm dịch là các dịch vụ đối tượng) là tầng chứa q
trình tương tác giữa ứng dụng và database, hay nói cách khác nó là nơi chủ yếu
để truy cập dữ liệu từ database và trả ngược kết quả về giao diện. Object
Services cung cấp các tiện ích để truy vết các thay đổi và quản lý nhận dạng,
đồng thời là các quan hệ và thay đổi ở database.
Đây là các class tự động sinh ra tương ứng với mơ hình dữ liệu. Các
class này bao gồm:
▪
▪
▪
▪
Ta
EF:
ObjectContext đại diện cho một database. ObjectContext có chức
năng quản lý các kết nối, định nghĩa mơ hình dữ liệu với metadata và thao
tác với database. Lớp này cũng có thể thêm vào các phương thức đại
diện cho các stored procedure trong database.
ObjectSet
này tương ứng với một table. Có thể lấy được các đối tượng này thông
qua các property tương ứng của ObjectContext.
EntityObject, ComplexObject là các lớp tương ứng cho một dòng
dữ liệu của table trong database. Khác biệt chính giữa hai loại này là
ComplexObject không chứa primary key.
EntityCollection
tượng thể hiện mối quan hệ (relationship) giữa hai entity class. Mỗi đối
tượng này có thể được truy xuất thơng qua các property của entity class.
có bảng ánh xạ tương đương sau giữa các đối tượng trong database và
Database Object
Entity Framework Object
Database
ObjectContext
Table, View
EntityObject, ComplexObject
Column
Property
Relationship
EntityCollection
EntityReference
Ví dụ sau cho thấy cách tạo một đối tượng ObjectContext từ mơ hình dữ
liệu ProductDBEntities (tên của connection string được lưu trong app.config),
10
sau đó sử dụng LINQ to Entities để lấy ra tất cả các sản phẩm (trong bảng
Productvà in ra màn:
1
ObjectContext context = new ObjectContext ("name=ProductDBEntities");
2
ObjectSet
3
var query = from p in products
4
where p.productPrice > 18000
5
select p;
6
7
foreach (var item in query)
8
{
9
Console.WriteLine("{0,-4}{1}", item.id, item.productName);
10
}
1 Milk tea
2 Latte
3 Capuchino
C.
Entity Data Model
Entity Data Model (EDM) là mơ hình dữ liệu được mô tả thông qua các ngôn ngữ
theo chuẩn XML. EDM được chia làm 3 lớp là: Conceptual, Mapping và Logical. Mỗi lớp
này được định nghĩa bởi ngôn ngữ riêng theo định dạng XML.( EDM khác với
EntityClient Data Provider ở chỗ EDM sử dụng LINQ là ngôn ngữ truy vấn tương tác
với database.)
Một ứng dụng Entity Framework (EF) có thể sử dụng 1 trong 3 cách tiếp cận:
Database First, Model First và Code First.
❖ Database First:
11
Đây là cách thông thường và được hỗ trợ từ phiên bản EF 1 trong Visual Studio
2008.EF sẽ tự động tạo ra data model và các class (object layer) cho bạn từ database
có sẵn thông qua công cụ Entity Data Model Wizard. Bạn có thể thay đổi data model và
cập nhật lại vào database. Đây là cách tiếp cận phổ biến vì cách thực hiện đơn giản,
nhanh chóng
❖ Model First:
Hướng tiếp cận này được bổ sung từ phiên bản EF 4 trong Visual 2010. Bạn có
thể tạo một data model rỗng bằng cơng cụ Entity Data Model Designer, khi đó object
layer cũng tự động được sinh ra. Sau khi đã hoàn thành việc thiết kế, bạn có thể sử
dụng chức năng Generate Database from Model để tạo ra các mã DDL (data definition
language) dựa trên mã SSDL (Store Schema Definition Language). Các mã DDL này sẽ
được thực thi và lưu thành tập tin .sql.
❖ Code First:
Với phiên bản EF 4 bạn cần phải cài thêm thư viện EF Feature CTP
(Community Technology Preview) để sử dụng. Tuy nhiên tính năng này đã được tích
hợp vào trong phiên bản EF 4.1 và với phiên bản VS 2010 hiện tại thì bạn cần phải
download để cài đặt thủ công. Hướng tiếp cận này bỏ qua phần Model (.edmx), bạn có
thể thiết kế các class tương ứng với các table của database mà bạn cần làm việc hoặc
muốn tạo ra. Với hướng tiếp cận này, bạn sẽ sử dụng class DbContext thay vì
ObjectContext để thao tác với database. Việc sử dụng Code First đòi hỏi bạn phải thực
hiện các công việc một cách thủ công nhưng bù lại nó linh hoạt và được sử dụng rất
phổ biến.
L2E (LINQ to Entities): là 1 ngôn ngữ truy vấn được dùng để viết các truy vấn
trái với mơ hình đối tượng. L2E trả về các thực thể, được định nghĩa bởi mơ hình khái
niệm. Chúng ta có thể dùng LINQ trong ngôn ngữ này.
12
Tham khảo thêm: CSDL, SSDL, and MSL Specifications
Các nội dung của ba tập tin .csdl, .msl và .ssdl được lưu trữ trong cùng tập
tin .edmx trong Visual Studio. Tập tin này có thể được tạo ra tự động từ
database và công cụ Entity Framework Model Wizard của Visual Studio. Trong
quá trình biên dịch, các tập tin .csdl, .msl và .ssdl sẽ được tạo ra dựa vào tập
tin .edmx này.
Note: Khi mở tập tin .edmx này, VS tự động hiển thị giao diện trực quan của nó
bằng cơng cụ mặc định là ADO.NET Entity Data Model Designer. Để xem nội
dung của tập tin này, bạn nhấn chuột phải, nhấn Open with… và chọn mục XML
Editor hoặc một trình xem dưới dạng văn bản bất kì.
D.
EntityClient Data Provider
Đây là tầng cung cấp các kết nối, diễn dịch các truy vấn thực thể thành
truy vấn nguồn dữ liệu (chuyển L2E – LINQ to Entity hay các truy vấn thực thể
SQL thành truy vấn SQL), trả về data reader để EF dùng chuyển dữ liệu thực thể
thành các đối tượng. Phần này kết nối ADO.NET Data Providers để gửi hoặc lấy
dữ liệu từ database. Tầng này hoàn toàn khác với EDM (Entity Data Model) khi
thực thi các truy vấn tương tự như cách thực hiện ở ADO.NET Provider.
EntityClient Data Provider sử dụng ESQL (Entity SQL), một ngôn ngữ truy vấn
độc lập dạng văn bản, tương tự như SQL.
EntityClient là một data provider mới của ADO.NET dùng để truy xuất đến
database. Được xây dựng bên trên các ADO.NET data provider cơ bản,
EntityClient không truy xuất trực tiếp dữ liệu mà thông qua các data provider
khác dựa vào các thông tin dữ liệu từ Entity Data Model.
EntityClient cũng bao gồm các lớp giống như các ADO.NET data provider
khác và tên lớp được đặt với tiền tố Entity. Ví dụ bạn có thể tạo kết nối
bằng EntityConnection, tạo các câu truy vấn bằng EntityCommand và đọc kết
quả bằng EntityDataReader.
13
Một điểm khác biệt với các data provider khác là EntityClient sử dụng Entity SQL
để truy vấn dữ liệu. Các lệnh Entity SQL sẽ được chuyển thành một cấu trúc
lệnh dạng cây (command tree) và chuyển xuống cho các data provider khác.
Ví dụ sau sử dụng EntityClient để tạo kết nối, tạo đối tượng
EntityCommand và sử dụng tham số để lấy các sản phẩm có ID là 1:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int id = 1;
using (EntityConnection con = new EntityConnection("Name=ProductDBEntities"))
{
con.Open();
EntityCommand cmd = con.CreateCommand();
cmd.CommandText = "SELECT VALUE p FROM ProductDBEntities.Products AS p WHERE
p.id = @catId";
cmd.Parameters.AddWithValue("catId", id);
EntityDataReader reader = cmd.ExecuteReader(CommandBehavior.SequentialAccess);
while (reader.Read())
{
var catId = reader["id"];
var name = reader["ProductName"];
Console.WriteLine("{0,-3}{1}", catId, name);
}
reader.Close();
}
E.
ADO.NET Data Providers
Đây là tầng thấp nhấp để dịch các truy vấn L2E (LINQ to Entity) thông qua
cây lệnh thành các câu lệnh SQL và thực thi các câu lệnh trong hệ thống DBMS
(database management system – hệ quản lý dữ liệu) nào đó. Tầng này kết với
database sử dụng ADO.NET.
IV. Vị trí của Entity Framework trong mơ hình lập trình và phát
triển Web
Chắc hẳn, bạn đã biết về mơ hình Web 3 tầng (n tầng) khi đọc
sách, giáo trình, bài giảng về nội dung lập trình Web. Tuy nhiên, vấn đề
bạn cần phải hiểu rõ là: việc định rõ số lượng các tầng và các mối liên hệ
giữa các tầng trong mơ hình phát triển Web cũng rất đa dạng, tùy theo
cách hiểu các lập trình viên và dự án Web. Do đó, việc hiểu Entity
Framework nằm ở đâu trong mơ hình Web 3 tầng cũng khơng hồn tồn
14
dễ dàng. Trong phần này, tơi có tham khảo từ Stephen M. Redd nhằm giúp
các bạn hiểu rõ bản chất vấn đề hơn.
Đầu tiên, chúng ta có vị trí của EF trong mơ hình dự án Web ASP.NET
MVC.
Trong mơ hình trên, chúng ta thấy vị trí của EF nằm trọn trong tầng
Data Access Layer, tức là EF đóng vai trò là nơi trung gian để tương tác
dữ liệu từ database với các tầng cao hơn, chẳng hạn như Business Layer.
Hay nói cách khác, EF đóng vai trò như là phiên bản mới của ADO.NET.
Tuy nhiên vị trí của EF trong mơ hình này chỉ có trên lý thuyết.
15