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ì
Trang 1C#.NET LINQ (tt) Lập trình Ứng dụng quản lý
Nội dung
LINQ to SQL
Trang 2Nội dung
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
Trang 3Kiế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, …)
Trang 4ORM
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 hoàn toà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âmtớ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
Trang 5Entity 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
Trang 6Relationships
Ánh xạ quan hệ 1-ntrong 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)
Trang 7Relationships (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 khoá
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.
Trang 8Mapping (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
Trang 9 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
Trang 10Compiled 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)
Trang 11Compiled 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
kiện
Gọi hàm DataContext.SubmitChanges() để
Trang 12Thay đổi dữ liệu (tt)
Thay đổi dữ liệu (tt)
Trang 13Thay đổi dữ liệu (tt)
Thay đổi dữ liệu (tt)
Trang 14Thay đổi dữ liệu (tt)
Có thể thay đổi khoá ngoại bằng cách
Add/Remove entiry ra khỏi entitySet
Thay đổi entityRef
Thay đổi dữ liệu (tt)
Trang 15Chấ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, toàn bộ thay đổi sẽ bị “bỏ
quên”, dataContextlú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ó rollbackkhi lưu thất bại developer phải
tự mình sửa lỗi & submitChangeslại
Giao tác (Transaction)
Trang 16Giao 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
Trang 17Luyệ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