Tải bản đầy đủ (.pdf) (122 trang)

Đồ án: " Tìm hiểu và xây dựng ứng dụng Web trên siêu thị trực tuyến với ASP.NET MVC " pps

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 (5.62 MB, 122 trang )






























Đ
ẠI HỌC THĂNG LONG



BỘ MÔN TIN HỌC

CHUYÊN ĐỀ TỐT NGHIỆP

TÌM HIỂU VÀ XÂY DỰNG ỨNG DỤNG
WEB SIÊU THỊ TRỰC TUYẾN
VỚI ASP.NET MVC


SINH VIÊN :
ĐẶNG TIẾN LỘC – A07138
GIÁO VIÊN HƯỚNG DẪN :
Ths. ĐOÀN QUANG MINH
HÀ NỘI 5/ 2010

BẢNG KÝ HIỆU VIẾT TẮT
MVC Model View Controller Mô hình lập trình ba lớp Model, View, Controller
được sử dụng trong nhiều framework lập trình
web trong đó có ASP.NET MVC, ZEND ,
J2EE…
API Application
Programming Interface
Giao diện lập trình được sử dụng bởi một ứng
dụng qua đó cho phép nó tương tác với ứng
dụng khác
ACK ACKnowledgement Thừa nhận một trường xác thực trong gói tin
http.
URL Uniform Resource
Locator

Địa chỉ website
LINQ .NET Language
Intergrated Query
Ngôn ngữ truy vấn tích hợp với .NET
CDN Content Delivery
Network
Mạng phân phối nội dung
SMTP Simple Mail Transfer
Protocol
Giao thức gửi thư điện tử
SSL Secure Socket Layer Tầng bảo mật Socket
IIS Internet Information
Server
Máy chủ thông tin mạng
EML Electronic Mail Thư điện tử (đuôi của tệp thư điện tử)
DOM Document Object
Model
định nghĩa tập các đối tượng chuẩn cho tất cả
tài liệu có cấu trúc
UI User Interface Giao diện người dùng

CPU Control Processing
Unit
Bộ điều khiển xử lí trong máy tính
MỤC LỤC
i
MỤC LỤC
GIỚI THIỆU CHUNG 1
CHƯƠNG 1: MỞ ĐẦU 3
1.1. Tổng quan về ASP.NET MVC 3

1.2. Tổng quan về ứng dụng thương mại siêu thị trực tuyến 3
2.1. Yêu cầu đặt ra cho kiến trúc hệ thống 4
2.2. Thiết kế kiến trúc hệ thống 4
2.2.1. Thiết kế kiến trúc phân tầng 5
2.2.2. Lựa chọn lưu trữ dữ liệu và thiết kế tầng truy xuất dữ liệu 5
2.2.3. Thiết kế tầng logic nghiệp vụ 9
2.2.4. Xây dựng vùng nhớ đệm - caching , sử dụng mạng phân phối nội dung tăng
hiệu năng của hệ thống 10
2.2.5. Tầng trình diễn (UI hay Views) 10
CHƯƠNG 2: TÌM HIỂU ASP.NET MVC VÀ LINQ 12
1.1. ASP.NET MVC là gì? 12
1.1.1. Mô hình MVC cơ bản 12
1.1.2. Một vài đặc tính của ASP.NET MVC 12
1.2. Sự khác biệt so với Web Form 13
1.3. Quá trình thực thi một ứng dụng nền web ASP.NET MVC 15
2.1. Linq to SQL là gì? 16
2.2. Mô hình hóa CSDL dùng Linq to SQL 16
2.3. Tìm hiểu lớp DataContext 18
2.4. Các ví dụ Linq to SQL 18
2.5. Tổng kết 21
CHƯƠNG 3: PHÂN TÍCH THIẾT KẾ ỨNG DỤNG 22
1.1. Thiết kế hệ thống 22
1.1.1. Các module của hệ thống 22
1.1.2. Mối quan hệ giữa các module 23
1.2. Đặc tả sơ lược các module 23
1.2.1. Module hồ sơ và thành viên 23
1.2.2. Module lấy ý kiến khách hàng 23
1.2.3. Module thương mại 23
1.2.4. Module gửi thư 23
1.2.5. Module diễn đàn 23

1.2.6. Module tìm kiếm siêu thị 24
1.2.7. Module bài báo, tin tức, và blog 24
1.2.8. Module quốc tế hóa 24
1.2.9. Module kiểm thử 24
2.1. Tổng quan về module 25
2.2. Sơ đồ chức năng 26
2.3. Các bảng DL của module 26
2.3.1. Tạo bảng DL 26
2.3.2. Cấu hình trong web.config cho membership, role và profile: 27
2.4. Models 28
2.4.1. Lớp UserInformation 28
2.4.2. Lớp ProfileInformation 28
2.5. Controllers 29
2.6. Views 30
2.7. Sử dụng Javascript 31
2.8. Cấu hình định tuyến 32

2.9. Xử lí xác thực người dùng 32
3.1. Tổng quan về module 33
3.2. Sơ đồ chức năng 34
3.3. Tìm hiểu , sử dụng Paypal cho chức năng thanh toán (check out) 34
3.3.1. Tạo tài khoản ảo cho mục đích kiểm thử 35
3.3.2. Quá trình thanh toán với Paypal từ website thương mại 35
3.4. Các bảng dữ liệu của module 37
3.5. Lớp thiết lập cấu hình cho module thương mại 37
3.6. Model 38
3.7. Controller 39
3.8. View 40
3.9. Sử dụng JavaScript 42
3.10. Cấu hình định tuyến 45

4.1. Tổng quan về module 47
4.2. Các vấn đề cần quan tâm khi xây dựng module: 47
4.3. Sơ đồ chức năng 50
4.4. Các bảng dữ liệu 50
4.5. Thiết kế lớp cấu hình cho module 51
4.6. Model 51
4.7. Controller 52
4.8. View 52
4.9. Cấu hình định tuyến 53
5.1. Tổng quan về module 54
5.2. Sơ đồ chức năng 54
5.3. Các bảng dữ liệu 55
5.4. Thiết kế lớp cấu hình cho module 56
5.5. Model 56
5.6. Controller 57
5.7. View 58
5.8. Sử dụng javascript 58
5.9. Cấu hình định tuyến 63
6.1. Tổng quan về module 65
6.2. Sơ đồ chức năng 65
6.3. Các bảng dữ liệu 66
6.4. Xây dựng lớp ForumsElement cho thiết lập cấu hình module 66
6.5. Model 66
6.6. Controller 67
6.7. View 68
6.8. Sử dụng javascript 69
6.9. Cấu hình định tuyến 73
6.10. Cấu hình trong tệp web.config 74
7.1. Tổng quan về module 75
7.2. Sơ đồ chức năng 75

7.3. Các bảng dữ liệu 76
7.4. Xây dựng lớp ArticleElement cho thiết lập cấu hình của module 76
7.5. Model 77
7.6. Controller 78
7.7. View 79
7.8. Sử dụng javascript 80
7.9. Cấu hình định tuyến 86
8.1. Tổng quan về module 90

8.2. Xây dựng module 90
8.2.1. Các Service hỗ trợ quốc tế hóa trong Framework của Microsoft 90
8.2.2. Xây dựng các tệp tài nguyên 91
8.2.3. Controller của module 93
8.2.4. View tương ứng của module 93
CHƯƠNG 4: SỬ DỤNG WEB FORMS TRONG ỨNG DỤNG ASP.NET MVC 97
1.1. Các lí do cho sự kết hợp giữa 2 công nghệ 97
1.2. Tại sao có thể thực hiện được sự kết hợp này 97
1.3. Các bước để kết hợp các trang WebForms vào ứng dụng ASP.NET MVC 97
2.1. Tổng quan về module 98
2.2. Sơ đồ chức năng 98
2.3. Phân tích cách xây dựng chức năng 98
2.4. Bảng CSDL 99
2.5. Các lớp hỗ trợ trong module 100
2.6. View 102
2.7. Thêm định tuyến cho các trang view của module 103
2.8. Vấn đề bảo mật 104
CHƯƠNG 5: TRIỂN KHAI ỨNG DỤNG VÀ HƯỚNG PHÁT TRIỂN 106
1.1. Các bước triển khai 106
1.2. Triển khai Global Store Site 106
1.3. Cấu hình IIS 7.0 cho Framework MVC sử dụng Microsoft Web Platform

Installer 107
1.4. Thêm Global Store site vào IIS 7.0 110
2.1. Hỗ trợ tìm kiếm sản phẩm mở rộng 112
2.2. Mở rộng chức năng tìm kiếm cửa hàng gần nhất 112
2.3. Xây dựng module báo cáo tình hình bán hàng của siêu thị kết xuất ra các tệp
định dạng Execel , Pdf 112
KẾT LUẬN 113
TÀI LIỆU THAM KHẢO 114
DANH MỤC HÌNH ẢNH 115



1
GIỚI THIỆU CHUNG
Trong chuyên đề tốt nghiệp này em thực hiện việc tìm hiểu ASP.NET MVC , mô
hình thương mại điện tử trực tuyến của các chuỗi siêu thị lớn trên thế giới như
, qua đó xây dựng hệ thống
thương mại trực tuyến trên nền tảng gồm các module:
 Module thành viên và hồ sơ.
- Đăng kí tài khoản
- Đăng nhập, đăng xuất
- Quản lí hồ sơ
- Quản lí vai trò người dùng, xóa , tạo vai trò
- Quản lí người dùng, tìm kiếm người dùng theo tên – theo email , xóa người
dùng, sửa đổi thông tin người dùng
 Moudle thương mại
- Duyệt toàn bộ các gian hàng trong siêu thị
- Xem một gian hàng với danh sách các mặt hàng có trong gian hàng
- Xem chi tiết một sản phẩm trong gian hàng , đưa vào giỏ hàng.
- Quản lí các gian hàng, tạo một gian hàng

- Quản lí các sản phẩm (chỉnh sửa thông tin sản phẩm, xóa sản phẩm), tạo
sản phẩm
- Quản lí các chọn lựa cách thức giao hàng (xóa, thêm cách thức giao hàng)
- Quản lí các đơn đặt hàng (xem chi tiết đơn hàng)
 Mudule tin tức – bài báo - blog
- Xem toàn bộ bài báo
- Xem theo đầu mục, chọn rss
- Xem chi tiết , viết lời bình và đánh giá bài báo
- Quản lí các đầu mục, tạo đầu mục
- Quản lí các bài báo (chỉnh sửa, xóa), tạo bài báo mới
- Quản lí các nhận xét bài báo


2
 Module chưng cầu ý kiến khách hàng
- Xem các chưng cầu - polls, cho ý kiến (vote)
- Quản lí các chưng cầu (chuyển chưng cầu sang trạng thái đã lấy đủ ý kiến -
archive, hiện hành, chỉnh sửa chưng cầu, xóa chưng cầu) , tạo chưng cầu
mới
 Module gửi thư từ hệ thống
- Xem ,xóa các thư đã gửi
- Tạo thư và gửi
 Module định vị cửa hàng siêu thị gần nhất
- Tìm các siêu thị trong khoảng cách nhất định
- Tìm đường đi tới 1 siêu thị
- Thêm vị trí siêu thị mới vào hệ thống
 Module Forum
- Duyệt các diễn đàn.
- Xem các bài thảo luận, tham gia thảo luận , xác nhận thích hay không thích
bài thảo luận, tạo bài thảo luận

- Quản lí các diễn đàn (chỉnh sửa , xóa diễn đàn)
- Quản lí các bài thảo luận (approve, đóng , xóa bài thảo luận)
 Module quốc tế hóa
- Hiển thị các thông tin địa phương ứng với thông tin địa phương trong hồ sơ
người dùng như tiền dùng ở địa phương, thời gian, cách viết con số của địa
phương,…
 Module kiểm thử
- Kiểm thử phần bài báo, blog
- Kiểm thử phần gửi thư


3
CHƯƠNG 1: MỞ ĐẦU
1. LÍ DO THỰC HIỆN ĐỀ TÀI
1.1. Tổng quan về ASP.NET MVC
Không phải tự nhiên mà rất nhiều web programming framework phổ biến nhất hiện
nay kế thừa các nguyên tắc của MVC như Django, Ruby on Rails, CakePHP,
Struts, … Sự thành công của việc kế thừa kiểu mẫu lập trình này cuối cùng cũng
đã khiến Microsoft quyết định đưa các nghuyên tắc đó vào sử dụng trong .NET
Framework và rồi hình thành nên ASP.NET MVC đầu năm 2007 phiên bản 1.0 .
Kiểu mẫu lập trình các ứng dụng nền tảng Web này tuy rằng không phải là kiểu
mẫu lập trình tốt nhất hiện nay xong nó có những ưu điểm nhất định và được sử
dụng khá phổ biến và đang tiếp tục được hỗ trợ phát triển của Micorosoft. Chính vì
những lí do này mà nó đáng được tìm hiểu để từ đó sử dụng một cách hiệu quả.
1.2. Tổng quan về ứng dụng thương mại siêu thị trực tuyến
Việc mua bán kinh doanh hiện nay đang ngày càng trở nên dễ dàng hơn với sự hỗ
trợ của CNTT hiện tại có một số lượng rất lớn các website thương mại đã được
xây dựng và sử dụng . Việc này giúp đa dạng hóa các phương thức bán hàng và
vì vậy hàng hóa được tiêu thụ dễ dàng hơn. Có rất nhiều ích lợi từ việc kinh doanh
trực tuyến có thể thấy được như:

Đối với khách hàng:
 Mua hàng ở bất kể đâu miễn là họ có máy tính kết nối mạng.
 Nhanh chóng tìm kiếm được mặt hàng cần mua chỉ qua vài click chuột.
 Không phải đối mặt với nhân viên bán hàng.
 …
Đối với doanh nghiệp:
 Có thêm được một kênh quảng bá sản phẩm hiệu quả mà chi phí thấp.
 Nắm bắt được thông tin phong phú về thị trường và đối tác.
 Thiết lập được mối quan hệ tốt với khách hàng và đối tác.
 Đa dạng hóa các kênh bán hàng của doanh nghiệp.
 ….
Hệ thống siêu thị trực tuyến là một ví dụ điển hình về thương mại điện tử nó có
đầy đủ các module mà một hệ thống thương mại điện tử cần có. Trong chuyên đề
tốt nghiệp của mình em sẽ xây dựng hệ thống bán hàng trực tuyến theo mô hình
MVC dựa trên nền tảng công nghệ .NET.


TIÊU ĐỀ CHƯƠNG 2


4
2. SƠ LƯỢC VỀ YÊU CẦU KIẾN TRÚC CỦA HỆ THỐNG
2.1. Yêu cầu đặt ra cho kiến trúc hệ thống
Xây dựng nên hệ thống siêu thị trực tuyến cấu thành từ các module riêng biệt
đồng thời quản lí nội dung động như bài báo,diễn đàn, phiếu điều tra (polls) và gửi
thư từ hệ thống thì cần giải quyết các vấn đề chung đặt ra với mỗi module đó là:
Tách biệt mã lệnh truy cập CSDL với mã lệnh logic nghiệp vụ và mã lệnh
cho giao diện để hệ thống có thể dễ dàng bảo trì và mở rộng .
Cô lập kiến trúc truy cập CSDL để từ đó có thể hỗ trợ việc lưu trữ với các
CSDL quan hệ khác nhau như SQL , MySQL , Oracle, mà không phải thực

hiện thay đổi nào với tầng đối tượng nghiệp vụ. Ngược lại việc thay đổi tầng
trình diễn (giao diện người dùng) hay tầng đối tượng nghiệp vụ cũng không
làm thay đổi các tầng còn lại – Tạo ra tính decoupling cho hệ thống.
Thiết kế kiến trúc đối tượng nghiệp vụ lấy từ tầng truy cập CSDL theo kiểu
hướng đối tượng bằng cách ánh xạ cơ sở dữ liệu quan hệ vào các lớp
OOP.
Hỗ trợ cơ chế caching với các đối tượng nghiệp vụ .Điều này giúp làm giảm
việc sử dụng CPU, nguồn CSDL, băng thông mạng – network bandwidth và
như vậy làm tăng hiệu năng chung của hệ thống.
Tạo tệp cấu hình cho các module để có thể dễ dàng thay đổi chúng.

2.2. Thiết kế kiến trúc hệ thống
Với các dự án ASP.NET web forms truyền thống ta sẽ không bao giờ thực sự tách
riêng được phần giao diện người dùng với logic ứng dụng bởi vì .NET cung cấp
sẵn các điều khiển phía máy chủ (server side control) mà ta thường sử dụng bằng
cách kéo thả vào các Web Form ví dụ như GridView. Các control kiểu này giúp
chúng ta thực hiện khá nhiều việc tuy nhiên lại thường làm cho mã lệnh xử lí logic
của ứng dụng lẫn vào với mã lệnh giao diện. Một ví dụ thường thấy đó là việc tạo
ra logic để sắp xếp các GridView hay lọc dữ liệu ứng với một sự kiện nhấn chuột.
Khi sử dụng những control như thế ta luôn cần có các tệp mã lệnh để xử lí logic
đằng sau (code behind file) các view.
Chúng ta có thể tự tạo trọn vẹn một ứng dụng có tính module tuy nhiên điều này
dẫn tới việc ta phải tự xây dựng framework cho ứng dụng của mình.
Với việc ra đời của framework asp.net mvc thì mọi thứ đã thay đổi hẳn không còn
các tệp mã lệnh xử lí logic đằng sau các view giúp tách biệt hoàn toàn giữa giao
diện với logic nghiệp vụ của ứng dụng. Với asp.net mvc framework ta có thể dễ
dàng, nhanh chóng phát triển kiến trúc ứng dụng theo hướng phân tầng (n-tier web
application)

TIÊU ĐỀ CHƯƠNG 2



5
2.2.1. Thiết kế kiến trúc phân tầng
Với ứng dụng siêu thị trực tuyến ta sẽ chia thành các tầng như sau:
Tầng lưu trữ dữ liệu: Nơi lưu trữ CSDL. CSDL của ứng dụng là CSDL quan hệ

Tầng truy cập CSDL (Data Access Layer – DAL): Mã lệnh để lấy dữ liệu , xử lí dữ
liệu thô được lưu trong tầng lưu trữ DL. Nhiệm vụ của tầng này là đưa ra các truy
xuất CSDL theo logic nghiệp vụ và có tính trực quan hơn cho ứng dụng. Che dấu
các chi tiết thâm nhập CSDL ở mức thấp tăng tính an toàn cho CSDL của hệ
thống.

Tầng nghiệp vụ (Business Logic Layer – BLL): Mã lệnh ở tầng này sẽ thực hiện
các nguyên tắc nghiệp vụ , tạo các đối tượng cụ thể thuộc miền nghiệp vụ nhằm
thỏa mãn các yêu cầu của ứng dụng.

Tầng Logic ứng dụng (Application Logic Layer): Mã lệnh thuộc tầng này sẽ xử lí
các tương tác giữa tầng trình diễn (Presentation Layer) với tầng logic nghiệp vụ

Tầng trình diễn (Presentation Layer – PL) : Là các đoạn mã lệnh tạo nên những gì
mà người dùng thấy ở trên trình duyệt – nó có thể là các dữ liệu đã được định
dạng, thực đơn duyệt hệ thống, …





Hình 1.1 – Kiến trúc ứng dụng


2.2.2. Lựa chọn lưu trữ dữ liệu và thiết kế tầng truy xuất dữ liệu

Ở ứng dụng này ta lựa chọn lưu trữ CSDL với SQL server 2008. SQL server 2008
tuy nhiên trong thực tế có thể khách hàng lại muốn sử dụng Oracle server hay IBM
DB2 server … vì nhiều lí do như họ muốn tích hợp ứng dụng của bạn vào một
project lớn hơn mà project lại dùng Oracle Server để lưu trữ DL nên tầng truy xuất
dữ liệu cần được thiết kế sao cho đủ linh hoạt để việc thay đổi diễn ra dễ dàng ,
nhanh chóng.

TIÊU ĐỀ CHƯƠNG 2


6
Tầng truy xất dữ liệu là mã lệnh thực hiện truy vấn CSDL để lấy dữ liệu, cập nhật,
chèn, hay xóa dữ liệu. Đây là mã lệnh gần với CSDL nhất , sử dụng tất cả những
gì có trong CSDL từ giản đồ các bảng,các stored procdure … cho đến các trường.
Mã lệnh truy xuất tới CSDL cụ thể phải được tách biệt với mã lệnh các trang web
vì các lí do như:

 Người viết code cho phần giao diện và người viết code cho phần truy cập
CSDL có thể không phải là một. Với những ứng dụng nền tảng web cỡ vừa
và lớn thì thường có nhiều lập trình viên tham gia xây dựng. Người xây
dựng giao diện sẽ hầu như không quan tâm tới CSDL. Tuy nhiên họ vẫn
cung cấp giao diện hiển thị thông tin từ CSDL bởi lẽ tất cả các chi tiết hiển
thị đã được gói gọn trong các đối tượng riêng biệt cung cấp việc truy vấn
CSDL ở mức cao – trừu tượng hơn.
 Một vài truy vấn CSDL sẽ được sử dụng ở một số các trang của ứng dụng.
Nếu như ta đặt trực tiếp truy vấn vào các trang này mà sau đó ta muốn thay
đổi một câu lệnh truy vấn như thay đổi cách thức sắp xếp , hoặc thay đổi
các trường dữ liệu ta sẽ phải xem lại toàn bộ code xem nơi nào sử dụng

chúng và thực hiện thay đổi. Nếu như ta đưa mã lệnh truy cập CSDL vào
một vài lớp trong tầng truy xuất CSDL ta sẽ chỉ phải thay đổi các file này mà
không cần quan tâm tới các trang web.
 Code truy vấn CSDL mà đặt trong các trang web sẽ làm khiến ta khó khăn
trong việc thay đổi sang CSDL quan hệ khác

Với asp.net mvc framework việc tách biệt tầng truy xuất CSDL là gần như bắt
buộc. Tất cả các đối tượng liên quan tới tầng truy xuất CSDL nên được đặt trong
thư mục models.
Để xử lí việc hỗ trợ lưu trữ dữ liệu linh động với các Database Server khác nhau ta
sẽ sử dụng kiểu mẫu thiết kế Provider Model cụ thể là thay vì việc viết trực tiếp các
lớp truy cập CSDL (DAL classes) đầu tiên ta sẽ viết lớp trừu tượng (abstract class)
và giao diện công khai của các lớp đó (public interface) và cả các phương thức hỗ
trợ nếu cần. Mã lệnh thực sự dùng truy vấn CSDL sẽ nằm ở lớp kế thừa trực tiếp
từ lớp trừu tượng và lớp này sẽ đưa ra các mã lệnh cụ thể cho các phương thức
trong interface của lớp trừu tượng. Lớp trừu tượng được gọi là Provider và đây là
lí do vì sao Micorsoft gọi kiểu mẫu thiết kế này là Provider Model .

Rõ ràng khi thay đổi Database Server ta chỉ việc thay đổi CSDL , thay đổi các lớp
thứ 2 này là xong . Hơn thế nữa với lớp trừu tượng ta biết rõ được phải xây dựng
lớp thứ 2 như thế nào và chúng ta không hề phải thay đổi các module khác ngoại
trừ module DAL. Trong trường hợp buộc phải thêm các lớp provider mới thì ta có
thể biến các lớp provider cũ thành virtual để từ đó cho phép các lớp provider mới
có các hàm quá tải (override) các hàm của các provider cũ.

Hình dưới đây minh họa mối quan hệ giữa các tầng giao diện, logic nghiệp vụ, truy
cập CSDL và lưu trữ CSDL
TIÊU ĐỀ CHƯƠNG 2



7

Hình 1.2 – Mối quan hệ giữa các tầng giao diện, logic nghiệp vụ, truy cập
CSDL và lưu trữ CSDL
Sử dụng LINQ ở tầng truy cập CSDL (DAL)
Với .NET Framework 3.5 chúng ta được cung cấp một tính năng mới là LINQ
(Language Intergrated Query) . LINQ được thiết kế để cung cấp cách thực hiện
truy vấn trên bất kể kiểu collection nào trong .NET Framework bao gồm mảng,
dictionaries, lists, XML, và các CSDL,…

LINQ có những tính năng đáng để xem xét dù ta có thể đơn giản sử dụng typed
data sets hay các thực thể ta tạo ra để thực hiện việc xây dựng tầng truy vấn
CSDL theo mong muốn như:
 Sử dụng các cấu trúc truy vấn giống với SQL trong mã lệnh .NET hay xem
đoạn code này:
SQL
select c.*
from Customer as c
TIÊU ĐỀ CHƯƠNG 2


8
LINQ
var customers = from c in dataContext.Customers
select c;
2 câu lệnh trên thực thi cùng một nhiệm vụ là truy vấn thông tin khách hàng
từ bảng Customers, tuy nhiên trong cách truy vấn sử dụng LINQ thì dữ liệu
được chuyển thành dạng collection, gọi là Iqueryable<Customer>, giúp ta
có thể sử dụng vòng lặp chuẩn foreach . Trong C# ta thấy có từ khóa mới là
var – là kiểu dữ liệu nạc danh (kiểu dữ liệu này chỉ được xác định khi biên

dịch – trình biên dịch sẽ biết nó có kiểu gì khi biên dịch và thay từ khóa var
với tên kiểu đúng của nó)
 Với LINQ có thể sử dụng kiểu dữ liệu an toàn (type safety) và các truy vấn
đa dạng hơn. Hãy xem câu lệnh truy vấn xem mỗi khách hàng trả bao nhiêu
cho các đơn đặt hàng của họ trong năm 2008 bằng SQL và LINQ:
SQL

select c.CustomerId, c.Name as CustomerName, sum(o.TotalPaid) as TotalPaid
from Customer as c
inner join Orders as o
on c.CustomerId = o.CustomerId
where o.OrderDate >= ‘1/1/2008’
and o.OrderDate <= ‘12/31/2008’
group by c.CustomerId, c.Name
LINQ
var customers = from c in dataContext.Customers
join o in dataContext.Orders on c.CustomerId equals o.CustomerId
where c.OrderDate >= new Date(2008, 1, 1)
&& c.OrderDate <= new Date(2008, 12, 31)
group o by new { c.CustomerId, c.Name } into g
select new {
CustomerId = c.CustomerId,
CustomerName = c.Name,
TotalPaid = g.Sum(o => o.TotalPaid)
};
Trong ví dụ với LINQ thì trường OrderDate có kiểu là System.DateTime. Vì
vậy nếu ta so sánh nó với dữ liệu kiểu chuỗi, hay bất kể một đối tượng nào
không phải kiểu DateTime thì trình biên dịch sẽ báo lỗi và cho biết chính xác
vị trí lỗi xảy ra đây là một ích lợi khi sử dụng LINQ.


Ví dụ dưới đâu sẽ cho thấy với LINQ ta có các truy vấn tiện ích hơn so với
SQL ví dụ như lấy một oder có ID = 2, lấy đối tượng OderInformation đổi
ngày thêm vào rồi lưu oder này lại vào CSDL .
var order = (from o in dataContext.Orders
where o.OrderId == 2
select o).FirstOrDefault();
foreach(var orderInformation in order.OrderInformation)
orderInformation.DateAdded = DateTime.Now;
dataContext.SubmitChanges();
TIÊU ĐỀ CHƯƠNG 2


9
LINQ-to-SQL : Để LINQ có thể được sử dụng ta cần phải khởi tạo model
tương ứng . Việc tạo model này hoàn toàn có thể thực hiện bằng cách kéo
thả các bảng cũng như store procedure vào phần designer . Các model sẽ
được tạo tự động. Việc tạo model như vậy giúp xây dựng ứng dụng nhanh
chóng tuy nhiên lại là hạn chế vì chỉ có thể sử dụng với SQL server.
2.2.3. Thiết kế tầng logic nghiệp vụ
Tầng truy cập CSDL được xây dựng với LINQ-to-SQL trả về các tập hợp của các
lớp thực thể chứa các trường của dữ liệu từ bảng DL. Tuy nhiên dữ liệu trả về của
tầng này vẫn là dữ liệu thô dù chúng được chứa trong các lớp bởi vì chúng được
sinh tự động. Chúng chỉ là nơi chứa các dữ liệu có định kiểu mạnh được sử dụng
để truyền dữ liệu giữa các tầng lưu trữ dữ liệu và tầng logic nghiệp vụ.

Tầng nghiệp vụ logic sử dụng các dữ liệu này chuyển chúng tới tầng giao diện
người dùng . Ở tầng này có thể có thêm kiểm định logic, xây dựng các biểu thức
tính toán dựa trên các thuộc tính, chuyển một số thuộc tính thành riêng tư (private)
hay chỉ đọc (read-only) thêm các phương thức tĩnh, thực thể để xử lí việc xóa,
chỉnh sửa, truy xuất dữ liệu. Việc tạo các dữ liệu hướng đối tượng , định kiểu

mạnh tạo ra sự trừu tượng hóa mạnh mẽ cô lập tầng lưu trữ CSDL cung cấp cho
lập trình viên phát triển giao diện tập hợp các lớp đơn giản , xong hiệu quả khi sử
dụng.

Với asp.net mvc framework thì tầng BLL nằm gọn trong các điều khiển (controllers)
và các lớp điều khiển bắt buộc phải được đặt trong thư mục controllers giúp tách
hẳn tệp code behind ra khỏi views. Các lớp này sử dụng các tập hợp (collections)
xử lí dữ liệu thông qua chúng trả lại view tương ứng. Với việc tạo tầng logic
nghiệp vụ ở thư mục controllers trong ứng dụng .net mvc thì ta có được một số ích
lợi như:

 Tạo được các kiểm định bộ phận (unit testing ) cho ứng dụng bởi lẽ tấc cả
các logic nghiệp vụ được đặt trong thư mục controllers hoặc các thực thể
mà ta tạo ra. Không có các trình điều khiển phía máy chủ và như vậy các
kiểm định bộ phận không bị lỗi.
 Bảo mật dễ dàng hơn bởi lẽ tất cả các xử lí được đặt trong các lớp điều
khiển ta không còn phải tách biệt các trang cần có cấp phép cao hơn và
đưa ra lệnh chứng thực cấp phép với thư mục chứa các trang này.
 Ta có thể trả về nhiều views từ một hành động trong controller.
Với vấn đề bảo mật ta chỉ cần xử lí đơn giản như trong đoạn code sau:
[Authorize (Roles = “Admin”)]
public ActionResult EditContent (int id, )
{
//logic dùng chỉnh sửa nội dung
return View();
}






TIÊU ĐỀ CHƯƠNG 2


10
2.2.4. Xây dựng vùng nhớ đệm - caching , sử dụng mạng phân phối nội
dung tăng hiệu năng của hệ thống
Với những ứng dụng nền tảng web có những dữ liệu ít thay đổi và thường được
yêu cầu bởi nhiều người dùng và trong hệ thống siêu thị trực tuyến các dữ liệu
như vậy có thể kể tới như danh sách các đầu mục bài báo, đầu mục sản phẩm và
các sản phẩm…
Để có thể tăng hiệu ứng cho hệ thống với những dữ liệu kiểu này ta có thể tạo
vùng nhớ đệm cho chúng và giữ vùng nhớ đệm này ở bộ nhớ trong những khoảng
thời gian xác định. Asp.net framework cũng khá mạnh trong việc giúp chúng ta xây
dựng , quản lí vùng nhớ đệm ở trong các lớp điều khiển. Hãy xem một ví dụ sau
cho thấy việc tạo vùng nhớ đệm và duy trì nó trong 60 giây
[OutputCache (Duration = 60)]
public ActionResult SomeControllerMethod()
{
//logic nghiệp vụ
}

Trong trường hợp hệ thống được truy cập bởi một lượng lớn người dùng mỗi ngày
(vài ngàn đến vài chục ngàn) ta có thể tính tới việc sử dụng các mạng phân phối
nội dung (Content Delivery Networks) đây là mạng phát tán của các máy chủ
(distributed network of servers) giúp ta giải quyết vấn đền quá tải truy cập nội dung
của hệ thống, giúp người dùng truy cập nội dung hệ thống nhanh hơn . Các mạng
này thực hiện công việc phôn phối nội dung thông qua mạng của các máy chủ
DNS hướng yêu cầu của người dùng tới một máy chủ có sẵn nội dung người dùng
cần và gần người này nhất.


Nội dung cần phân phối có thể là các file ảnh, javascript, css, tài liệu, phim ảnh ,
âm thanh … với hệ thống siêu thị trực tuyến này thì các tệp nội dung được đặt
trong thư mục Content việc đưa tất cả các file nội dung vào thư mục này sẽ rất phù
hợp với cơ chế làm việc của CDN ở chỗ để CDN hoạt động ta cần phải cài phần
mềm tương ứng vào máy chủ web chứa hệ thống và cấu hình để phần mềm này
biết cụ thể vị trí của nội dung cần phân phối việc đưa nội dung cần phân phối vào
một thư mục sẽ dễ dàng cho việc cấu hình và quá trình lookup của phần mềm này.

Về mặt giá cả thì giải pháp sử dụng CDN sẽ rẻ hơn nhiều so với việc thuê đường
truyền có băng thông lớn hơn.

2.2.5. Tầng trình diễn (UI hay Views)
Tầng trình diễn tương ứng với các trang Web Forms duy chỉ có điều là không có
các tệp mã lệnh đằng sau mỗi web form. Ta đã biết các tệp mã lệnh đó được thay
thế bằng những lớp điều khiển (Controller classes) . Tuy nhiên còn các server
control (được cung cấp bởi Microsoft , hoặc các hãng thứ 3) vẫn thường được sử
dụng trong các asp.net web forms trước kia thì sao? Trên thực tế những control
kiểu này không còn cần thiết trong các web forms nữa.

ASP.NET MVC framework đem đến rất nhiều lựa chọn thay thế cho các control đó
mà trong hệ thống siêu thị trực tuyến sử dụng . Framework này có một tập các
phương thức mở rộng hỗ trợ HTML giúp tự động tạo và gắn kết dữ liệu của khá
TIÊU ĐỀ CHƯƠNG 2


11
nhiều controls mà ta vẫn sử dụng với ASP.NET web forms. Ví dụ về tạo textbox và
tiêu đề của textbox này được ánh xạ bởi từ điển ViewData .


<label for =”title”> Title </label><br/>
<%= Html.Textbox(“Title”, ViewData.Model.Title)%>
Khi đoạn code trên được chuyển tới trình duyệt thì nó được chuyển thành đoạn
code HTML tương ứng sau:
<label for =”title”> Title </label><br/>
<input id = “Title” name = “Title” type = “text” vale=”Chief Technology Officer”/>
Đoạn code này đơn giản chỉ có thẻ input mà hoàn toàn không có liên quan tới
thuộc tính runat. Đối với trình duyệt input này được viết hoàn toàn bằng HTML
điều này giúp tối ưu hóa khả năng tìm kiếm hệ thống của các hệ thống tìm kiếm
như google hay bing giúp các khách hàng chưa biết tới hệ thống có thể tìm đến hệ
thống thông qua cỗ máy tìm kiếm

Ở tầng này của hệ thống siêu thị trực tuyến có sử dụng javascript ở để xử lí các
sự kiện không đồng bộ phía người dùng. Cụ thể ta sẽ sử dụng JQuery – đây là
javascript framework ổn định , ra đời cách đây vài năm , có các tài liệu hỗ trợ đầy
đủ , dễ sử dụng .

































TIÊU ĐỀ CHƯƠNG 2


12
CHƯƠNG 2: TÌM HIỂU ASP.NET MVC VÀ LINQ
1. TỔNG QUAN VỀ ASP.NET MVC
1.1. ASP.NET MVC là gì?
1.1.1. Mô hình MVC cơ bản
Tham khảo asp.net mvc của microsoft
MVC viết tắt của các chữ cái đầu của Models, Views, Controllers. MVC chia giao
diện UI thành 3 phần tương ứng: đầu vào của controller là các điều khiển thông
qua HTTP request, model chứa các miền logic, view là những thứ được sinh ra trả

về cho trình duyệt.

Hình 2.1 – Mô hình MVC cơ bản
Lợi ích của việc dùng phương pháp MVC là sự phân đoạn rõ ràng giữa models,
views, controllers bên trong ứng dụng. Cấu trúc sạch sẽ giúp cho việc kiểm tra lỗi
ứng dụng trở nên dễ dàng hơn.

1.1.2. Một vài đặc tính của ASP.NET MVC
TIÊU ĐỀ CHƯƠNG 2


13

 Tách rõ ràng các mối liên quan, mở khả năng test TDD (test driven
developer). Có thể test unit trong ứng dụng mà không cần phải chạy
Controllers cùng với tiến trình của ASP.NET và có thể dùng bất kỳ một unit
testing framework nào như NUnit, MBUnit, MS Test, v.v…
 Có khả năng mở rộng, mọi thứ trong MVC được thiết kế cho phép dễ dàng
thay thế/tùy biến ( ví dụ: có thể lựa chọn sử dụng engine view riêng, routing
policy, parameter serialization, v.v…).
 Bao gồm một ánh xạ URL mạnh mẽ cho phép xây dựng ứng dụng với
những URL sạch, các URL không cần cs phần mở rộng ( ví dụ: có thể ánh
xạ địa chỉ /Products/Edit/4 để thực hiện hành động “Edit” của lớp điều khiển
ProductControllers hoặc ánh xạ địa chỉ /Blog/SomeTopic để thực hiện hành
động “Display Topic” của lớp điều khiển BlogEngineController )
 ASP.NET MVC Framework cũng hỗ trợ những file ASP.NET như .ASPX
.ASCX và .Master, đánh dấu các tập tin này như một “view template” ( có
thể dễ dàng dùng các tính năng của ASP.NET như lồng các trang Master,
<%= %> snippets, mô tả server controls, template, data-binding,
localization, v.v… ). Tuy nhiên sẽ không còn postback và interactive back

server và thay vào đó là interactive end-user tới một Controller class ( không
còn viewstate, page lifecycle )
 ASP.NET MVC Framework hỗ trợ đầy đủ các tính năng bảo mật của
ASP.NET như forms/windows authenticate, URL authorization,
membership/roles, output và data caching, session/profile state,
configuration system, provider architecture v.v…
1.2. Sự khác biệt so với Web Form
ASP.NET WebForm sử dụng ViewState để quản lý, các trang ASP.NET đều có
lifecycle, postback và dùng các web controls, các events để thực hiện các hành
động cho UI khi có sự tương tác với người dùng nên hầu hết ASP.NET WebForm
xử lý chậm.

ASP.NET MVC Framework chia ra thành 3 phần: Models, Views, Controllers. Mọi
tương tác của người dùng với Views sẽ thực hiện hành động trong Controllers,
không còn postback, không còn lifecycle hay events nữa.

Việc kiểm tra ( test ), gỡ lỗi ( debug ) với ASP.NET đều phải chạy tất cả các tiến
trình của ASP.NET và mọi sự thay đổi ID của bất kỳ controls nào cũng ảnh hưởng
đến ứng dụng. Đối với ASP.NET MVC Framework thì việc có thể sử dụng các unit
test có thể kiểm định khá dễ dàng hoạt động của các controller.




TIÊU ĐỀ CHƯƠNG 2


14
Tính năng ASP.NET 2.0 ASP.NET MVC
Kiến trúc chương trình Kiến trúc mô hình

WebForrm  Bussiness 
Database
Kiến trúc sử dụng việc
phân chia chương trình
thành Controllers, Models,
Views
Cú pháp chương trình Sử dụng cú pháp của
webform. Tất cả các sự
kiện và controls đều do
server quản lí
Các sự kiện được điều
khiển bởi Controllers, các
controls không do server
quản lí
Truy cập dữ liệu Sử dụng hầu hết các công
cụ truy cập dữ liệu trong
ứng dụng
Phần lớn dùng LINQ to
SQL class để tạo mô hình
truy cập đối tượng
Debug Debug chương trình phải
thực hiện tất cả bao gồm
các lớp truy cập dữ liệu ,
sự hiển thị, điều khiển các
controls
Debug có thể sử dụng
các unit test kiểm tra các
phương thức trong
controller
Tốc độ phân tải Tốc độ phân tải chậm trong

khi trang có quá nhiều
controls vì ViewState quá
lớn
Phân tải nhanh hơn do
không phải quản lý
ViewState để quản lý các
control trong trang
Tương tác với javascript Tương tác với javascript
khó khăn vì các controls bị
quản lí bởi server
Tương tác với javascript
dễ dàng vì các đối tượng
không do server quản lí
dẫn tới điều khiển không
khó khăn
URL address Cấu trúc địa chỉ URL có
dạng
<filename>.aspx?&<các
tham số>
Cấu trúc địa chỉ URL rành
mạch theo dạng
Controllers /Action/ Id


TIÊU ĐỀ CHƯƠNG 2


15
1.3. Quá trình thực thi một ứng dụng nền web ASP.NET MVC


Một yêu cầu gửi tới ứng dụng nền tảng web viết bằng ASP.NET MVC đầu tiên sẽ
đi qua đối tượng UrlRoutingModule, đây là một module của HTTP. Module này sẽ
phân tích yêu cầu và thực thi việc chọn lựa định tuyến. Nó sẽ chọn đối tượng route
đầu tiên thích hợp với yêu cầu hiện thời. (Đối tượng route là lớp thực thi BaseUrl ,
là một thể hiện cụ thể của lớp Route) Nếu không có định tuyến nào thích hợp đối
tượng UrlRoutingModule sẽ không thực hiện việc định tuyến mà trả yêu cầu đó
về cho IIS hay ASP.NET xử lí.

Từ đối tượng Route được chọn lựa, đối tượng UrlRoutingModule nhận lấy đối
tượng IRouteHandler tương ứng với đối tượng Route. Cụ thể trong một ứng dụng
ASP.NET MVC thì IRouteHandler sẽ là một thể hiện của MvcRouteHandler. Thể
hiện này sẽ tạo ra một đối tượng IHttpHandler và truyền nó tới đối tượng
IHttpContext . Theo mặc định,thể hiện IHttpContext của MVC là đối tượng
MvcHandler . Đối tượng này sẽ chọn ra controller đáp ứng yêu cầu gửi tới ứng
dụng.

Chú ý: Khi một ứng dụng nền Web viết bằng ASP.NET MVC chạy trên IIS 7.0 ,
phần mở rộng tên file là không cần thiết đối vớp dự án ứng dụng đó. Tuy nhiên
nến chạy trên IIS 6.0 , IIS 6.0 yêu cầu bạn phải chỉ ra cho ASP.NET ISAPI DLL
nhận các file có phần mở rộng .mvc

Module nói trên và IIS là các điểm đầu vào đối với ASP.NET MVC framework .
Chúng thực hiện những việc sau:

 Chọn ra một controller tương ứng xử lí yêu cầu trong một ứng dụng MVC
nền web.
 Có được một thể hiện cụ thể của controller đó.
 Gọi phương thức Execute của controller này.
Bảng sau sẽ liệt kê các giai đoạn thực thi của một dự án nền Web ASP.NET MVC
Giai đoạn Chi tiết

Nhận yêu cầu
đầu tiên của
ứng dụng
Trong file Global.asax, các đối tượng Route được thêm vào đối
tượng RouteTable
Thực thi việc
định tuyến
Module UrlRoutingTable sử dụng đối tượng Route đầu tiên thích
hợp trong tập RouteTable để tạo đối tượng RouteData . Đối
tượng này sau đó lại tạo ra đối tượng RequestContext
(IHttpContext).
Tạo ra trình
xử lí yêu cầu
Đối tượng MvcRouteHandler tạo ra một thể hiện của lớp
TIÊU ĐỀ CHƯƠNG 2


16
ứng dụng
MvcHandler

và truyền vào nó thể hiện
RequestContext

Tạo ra
controller
Các đối tượng MvcHandler sử dụng thể hiện của
RequestContext để xách định đối tượng IcontrollerFactory qua
đó tạo ra thể hiện controller
Thực thi

Controller
Thể hiện MvcHandler gọi phương thức Execute của controller.
Triệu gọi
action
Hầu hết các controllers đều kế thừa từ lớp Controller cơ bản. Đối
với các controller như thế đối tượng ControllerActionInvoker đi
kèm với controller đó sẽ xác định phương thức action của lớp
controller đó để gọi, và rồi gọi phương thức đó.
Thực thi kết
quả
Một phương thức action cụ thể mà nhận được dữ liệu từ người
dùng sẽ chuẩn bị dữ liệu trả về thích hợp. Những kiểu dữ liệu trả
về được xây dựng sẵn có thể được trả về gồm có: ViewResult
(Cái thể hiện một View và là dữ liệu thường được trả về nhất),
RedirectToRouteResult, RedirectResult….
2. LINQ TO SQL
Tham khảo
2.1. Linq to SQL là gì?
LINQ to SQL là một phiên bản hiện thực hóa của O/RM (object relational mapping)
có bên trong .NET Framework bản “Orcas” (nay là .NET 3.5), nó cho phép bạn mô
hình hóa một cơ sở dữ liệu dùng các lớp .NET. Sau đó bạn có thể truy vấn cơ sở
dữ liệu (CSDL) dùng LINQ, cũng như cập nhật/thêm/xóa dữ liệu từ đó.
LINQ to SQL hỗ trợ đầy đủ transaction, view và các stored procedure (SP). Nó
cũng cung cấp một cách dễ dàng để thêm khả năng kiểm tra tính hợp lệ của dữ
liệu và các quy tắc vào trong mô hình dữ liệu của bạn.
2.2. Mô hình hóa CSDL dùng Linq to SQL
Visual Studio “Orcas” đã tích hợp thêm một trình thiết kế LINQ to SQL như một
công cụ dễ dàng cho việc mô hình hóa một cách trực quan các CSDL dùng LINQ
to SQL. Bài viết sau sẽ đi sâu hơn vào cách dùng trình thiết kế này (bạn cũng có
thể xem đoạn video này để xem cách tôi tạo một mô hình LINQ to SQL).

Bằng cách dùng trình thiết kế LINQ to SQL, tôi có thể dễ dàng tạo một mô hình
cho CSDL mẫu “Northwind” giống như dưới đây:

TIÊU ĐỀ CHƯƠNG 2


17

Hình 2.2 – Mô hình LINQ to SQL
Mô hình LINQ to SQL ở trên định nghĩa bốn lớp thực thể: Product, Category, Order
và OrderDetail. Các thuộc tính của mỗi lớp ánh xạ vào các cột của bảng tương
ứng trong CSDL. Mỗi instance của một lớp biểu diễn một dòng trong bảng dữ liệu.


Các mũi tên giữa bốn lớp thực thể trên biểu diễn quan hệ giữa các thực thể khác
nhau, chúng được tạo ra dựa trên các mối quan hệ primary-key/foreign-key trong
CSDL. Hướng của mũi tên chỉ ra mối quan hệ là một – một hay một – nhiều. Các
thuộc tính tương ứng sẽ được thêm vào các lớp thực thể trong các trường hợp
này.


Lấy ví dụ, lớp Category ở trên có một mối quan hệ một nhiều với lớp Product, điều
này có nghĩa nó sẽ có một thuộc tính “Categories” là một tập hợp các đối tượng
Product trong Category này. Lớp Product cũng sẽ có một thuộc tính “Category” chỉ
đến đối tượng ”Category” chứa Product này bên trong.


Bảng các phương thức bên tay phải bên trong trình thiết kế LINQ to SQL ở trên
chứa một danh sách các SP để tương tác với mô hình dữ liệu của chúng ta. Trong
ví dụ trên tôi đã thêm một thủ tục có tên “GetProductsByCategory”. Nó nhận vào

một categoryID và trả về một chuỗi các Product. Chúng ta sẽ xem bằng cách nào
có thể gọi được thủ tục này trong một đoạn code bên dưới.
TIÊU ĐỀ CHƯƠNG 2


18
2.3. Tìm hiểu lớp DataContext
Khi ta bấm nút “Save” bên trong màn hình thiết kế LINQ to SQL, Visual Studio sẽ
lưu các lớp .NET biểu diễn các thực thể và quan hệ bên trong CSDL mà chúng ta
vừa mô hình hóa.


Cứ mỗi một file LINQ to SQL chúng ta thêm vào solution, một lớp DataContext sẽ
được tạo ra, nó sẽ được dùng khi cần truy vấn hay cập nhật lại các thay đổi. Lớp
DataContext được tạo sẽ có các thuộc tính để biểu diễn mối bảng được mô hình
hóa từ CSDL, cũng như các phương thức cho mỗi SP mà chúng ta đã thêm vào.


Lấy ví dụ, dưới đây là lớp NorthwindDataContext được sinh ra dựa trên mô hình
chúng ta tạo ra ở trên:

Hình 2.3 – Mô hình NorthwindDataContext

2.4. Các ví dụ Linq to SQL
Lấy sản phẩm từ CSDL:
Đoạn lệnh dưới đây dùng cú pháp LINQ để lấy về Ienumerable các đối tượng
Product. Các sản phẩm lấy ra phải thuộc phân loại “Beverages”:
TIÊU ĐỀ CHƯƠNG 2



19

Hình 2.4 – Hình minh họa lấy sản phẩm từ CSDL với LINQ
Cập nhật một sản phẩm trong CSDL:
Đoạn lệnh dưới đây cho thấy cách lấy một sản phẩm , cập ạnhật li giá tiền và lưu
lại CSDL.

Hình 2.5 – Hình minh họa cập nhật sản phẩm từ CSDL với LINQ
Chèn thêm một phân loại mới và 2 sản phẩm vào CSDL:
Đoạn mã dưới đây biểu diễn cách tạo một phân loại mới, và tạo hai sản phẩm mới
, đưa chúng vào trong phân loại đã tạo rồi đưa vào CSDL.

Chú ý rằng ta không cần phải tự quản lý các mối quan hệ primary key/foreign key,
thay vào đó, chỉ đơn giản thêm các đối tượng Product vào tập hợp Products của
đối tượng category, và rồi thêm đối tượng category vào tập hợp Categories của
DataContext, LINQ to SQL sẽ biết cách thiết lập các giá trị primary key/foreign key
một cách thích hợp.

TIÊU ĐỀ CHƯƠNG 2


20
Hình 2.6 – Chèn sản phẩm mới vào CSDL
Xóa các sản phẩm:
Đoạn mã sau sẽ biểu diễn cách xóa tất cả các sản phẩm Toy khỏi CSDL:

Hình 2.7 – Xóa một sản phẩm
Gọi một thủ tục:

Đoạn mã dưới đây biểu diễn cách lấy các thực thể Product mà không dùng cú

pháp của LINQ, mà gọi đến thủ tục “GetProductsByCategory” chúng ta đã thêm
vào trước đây. Nhớ rằng một khi đã lấy về kết quả, ta có thể cập nhật/xóa và sau
đó gọi db.SubmitChanges() để cập nhật các thay đổi trở lại CSDL.

Hình 2.8 – Gọi một thủ tục
Lấy các sản phẩm và phân trang:
Đoạn mã dưới đây biểu diễn cách phân trang trên server như một phần của câu
truy vấn LINQ. Bằng cách dùng các toán tử Skip() và Take(), chúng ta sẽ chỉ trả về
10 dòng từ CSDL – bắt đầu từ dòng 200.

×