11/21/2018
Lập trình Ứng dụng quản lý
C#.NET
LINQ (tt)
Nội dung
LINQ to SQL
1
11/21/2018
Nội dung
LINQ to SQL
Tính bền vững dữ liệu
Ứng dụng thường có nhu cầu lưu lại dữ liệu.
Dữ liệu có thể là file text, xml, cơ sở dữ liệu
quan hệ, …
Trong phần mềm hướng đối tượng, dữ liệu
cần lưu là các objects
Lưu trữ tình trạng hiện tại
Có khả năng tái tạo lại tình trạng đã được lưu
2
11/21/2018
Kiến trúc phần mềm
Hướng tiếp cận
Các hướng tiếp cận trong .NET
DataSets
Hand-coding
ORM (DLINQ, NHibernate, …)
3
11/21/2018
ORM
Lập trình hướng đối tượng là hướng tiếp cận tốt để
xây dựng ứng dụng phức tạp. Trong lập trình hướng
đối tượng chúng ta tương tác với các thành phần dữ
liệu (Model) là các đối tượng.
ORM (Object Relational Mapping), là một kỹ thuật/cơ
chế lập trình thực hiện ánh xạ CSDL sang các đối
tượng trong các ngơn ngữ lập trình hướng đối tượng
như Java, C# …(các table tương ứng các class, mối
ràng buộc giữa các table tương ứng quan hệ giữa
các class ‘has a’ , ‘is a’).
Việc sử dụng ORM cho phép lập trình viên thao tác
với database 1 cách hồn tồn tự nhiên, dễ hiểu
thơng qua các đối tượng. Lập trình viên khơng cần
quan tâm tới loại database, kiểu dữ liệu trong
database…
Tính năng, cài đặt
ORM hỗ trợ các tính năng: caching, transaction,
concurrency control
Lập trình viên chỉ cần quan tâm tới việc ánh xạ các
đối tượng sang CSDL
LINQ to SQL (DLINQ) là 1 công cụ ORM
4
11/21/2018
Entity Class
Ánh xạ class sang table thông qua các
attribute
Class Table
Property Field
DataContext
Là đối tượng chủ chốt trong DLINQ
Quản lý tất cả các thao tác CRUD xuống CSDL
5
11/21/2018
Relationships
Ánh xạ quan hệ 1-n trong CSDL quan hệ
Sử dụng attribute Association ở cả 2 class
Class [1] định nghĩa OtherKey
Class [n] định nghĩa ThisKey
Relationships (tt)
6
11/21/2018
Relationships (tt)
Mapping
Sử dụng công cụ giúp generate mapping
sqlmetal: thông qua command-line
Sử dụng Visual Studio
Nếu khi thực hiện thao tác ánh xạ, CSDL đã có cài đặt khố
ngoại thì Visual Studio tự động add các entityRef &
entitySet vào các Entity
Không cần thực hiện JOIN khi cần truy vấn thông tin
trên nhiều table.
7
11/21/2018
Mapping (tt)
Truy vấn dữ liệu
Khai báo dataContext
Đối tượng DataContext có các thuộc tính ứng
với các table dưới CSDL
db.Customers
db.Categories
…
Các thuộc tính này chính là nguồn dữ liệu cho
các truy vấn LINQ
8
11/21/2018
Query
Truy vấn chỉ được thực thi khi nào thực sự
dùng đến
Duyệt kết quả truy vấn
Gán lên control
Cache dữ liệu
Nếu cần dùng đến kết quả truy vấn >1 lần,
nên cache kết quả truy vấn lại ToList/
ToArray
9
11/21/2018
Compiled Queries
Nhu cầu: dùng 1 câu query LINQ nhiều lần
nhưng khác tham số
Vd:
Hiển thị danh sách học sinh của lớp
Hiển thị danh sách hoá đơn của khách hàng
Giải pháp:
Viết nhiều câu query tốn kém chi phí chuyển đổi
truy vấn LINQ sang truy vấn SQL
Sử dụng Compiled Query: thích hợp cho web
Compiled Queries (tt)
10
11/21/2018
Compiled Queries (tt)
Thay đổi dữ liệu
Thay đổi dữ liệu trực tiếp lên các Entities
Các hàm thay đổi dữ liệu
InsertOnSubmit: thêm 1 entity
DeleteOnSubmit: xoá 1 entity
DeleteAllOnSubmit: xoá tất cả entities thoả điều
kiện
Gọi hàm DataContext.SubmitChanges() để
lưu các thay đổi xuống CSDL
11
11/21/2018
Thay đổi dữ liệu (tt)
Thay đổi dữ liệu (tt)
12
11/21/2018
Thay đổi dữ liệu (tt)
Thay đổi dữ liệu (tt)
13
11/21/2018
Thay đổi dữ liệu (tt)
Có thể thay đổi khố ngoại bằng cách
Add/Remove entiry ra khỏi entitySet
Thay đổi entityRef
Thay đổi dữ liệu (tt)
14
11/21/2018
Chấp nhận thay đổi
Mỗi khi gọi submitChanges, toàn bộ thay đổi sẽ
được lưu xuống CSDL
Sau khi lưu thành cơng, tồn bộ thay đổi sẽ bị “bỏ
qn”, dataContext lúc này khơng cịn chứa bất kỳ
thơng tin nào về những thay đổi nữa.
Khơng có rollback khi lưu thất bại developer phải
tự mình sửa lỗi & submitChanges lại
Giao tác (Transaction)
15
11/21/2018
Giao tác (Transaction)
Luyện tập Query
Với database Northwind. Hãy liệt kê tất cả các
Product.
Với database Northwind. Hãy liệt kê tất cả các
Product theo nhóm Category.
Với database Northwind. Hãy nhóm các đơn
hàng của khách hàng theo năm và theo tháng.
Với database Northwind. Tìm tất cả các đơn hàng
có tổng giá trị nhỏ hơn 500 triệu.
Với database Northwind. Tìm tất cả các đơn hàng
được lập sau năm 1997.
Với database Northwind. Tìm tất cả các đơn hàng
có tổng giá trị lớn hơn 600 triệu và được khách
hàng từ USA đặt.
16
11/21/2018
Luyện tập Query (tt)
Với database Northwind, hãy tìm các Category có
ít nhất 1 Product hết hàng.
Với database Northwind, hãy tìm các Category
khơng có Product nào hết hàng.
Với database Northwind, hãy cho biết số lượng
đặt hàng của mỗi khách hàng.
Với database Northwind, hãy cho biết số sản
phẩm trong mỗi danh mục.
Với database Northwind, hãy cho biết tổng số
lượng sản phẩm trong mỗi danh mục.
Luyện tập Query (tt)
Với database Northwind, hãy cho biết giá rẻ nhất
trong mỗi danh mục.
Với database Northwind, hãy cho biết sản phẩm
rẻ nhất trong mỗi danh mục.
Với database Northwind, hãy cho biết giá đắt
nhất trong mỗi danh mục.
Với database Northwind, hãy cho biết sản phẩm
đắt nhất trong mỗi danh mục.
Với database Northwind, hãy cho biết mức giá
trung bình của sản phẩm trong mỗi danh mục.
17