
Định nghĩa các lớp mô hình dữ liệu (LINQ to SQL phần 2)
Trong phần một, tôi đã thảo luận về “LINQ to SQL là gì” và cung cấp một
cái nhìn cơ bản về những trường hợp chúng ta có thể sử dụng nó.
Trong bài viết đầu tiên, tôi cũng đã cung cấp các đoạn code mẫu để biểu
diễn cách xử lý dữ liệu dùng LINQ to SQL, bao gồm:
Cách truy vấn dữ liệu
Các cập nhật dữ liệu
Cách chèn và tạo quan hệ các dòng trong một CSDL
Cách xóa các dòng trong một CSDL
Cách gọi một thủ tục
Cách lấy dữ liệu và phân trang trên server
Tôi đã thực hiện tất cả các thao tác dữ liệu đó bằng cách dùng một mô hình
dữ liệu LINQ to SQL giống như dưới đây:

Trong bài này, tôi sẽ đi vào chi tiết cách tạo ra một mô hình dữ liệu LINQ to
SQL giống như trên.
LINQ to SQL, cũng như LINQ to SQL, và tất cả các tính năng khác mà tôi
đã nói đến trong loạt bài này sẽ đượccoi như một phần của .NET 3.5 và
Visual Studio “Orcas” (nay là Visual Studio 2008).
Bạn có thể làm theo tất cả các bước dưới đây bằng cách tải về hoặc Visual
Studio 2008 hoặc Visual Web Developer Express. Cả hai đều có thể được
cài đặt và dùng đồng thời với Visual Studio 2005.
Tạo ra một mô hình dữ liệu LINQ to SQL
Bạn có thể thêm một mô hình dữ liệu LINQ to SQL và một dự án ASP.NET,
Class Library hay Windows bằng cách dùng tùy chọn “Add New Item” bên
trong Visual Studio và chọn “LINQ to SQL”:
Việc chọn mục “LINQ to SQL” sẽ khởi chạy LINQ to SQL designer, và cho
phép bạn mô hình hóa các lớp mà nó biểu diễn một CSDL quan hệ. Nó cũng
sẽ tạo ra một lớp kiểu “DataContext”, trong đó có các thuộc tính để biểu
diễn mỗi bảng mà chúng ta mô hình hóa trong CSDL, cũng như các phương
thức cho mỗi Stored Procedure mà chúng ta mô hình hóa. Như tôi đã mô tả
trong phần 1 của loạt bài này, lớp DataContext là thành phần trung tâm của

mô hình, toàn bộ các thao tác truy vấn hoặc cập nhật dữ liệu đều được thực
hiện thông qua lớp này.
Dưới đây là ảnh chụp màn hình của một của sổ thiết kế LINQ to SQL, và
cũng là cái mà bạn sẽ thấy ngay khi tạo ra một mô hình dữ liệu LINQ to
SQL:
Các lớp thực thể
LINQ to SQL cho phép bạn mô hình hóa các lớp ánh xạ vào CSDL. Các lớp
này thường được là “Entity Class” (lớp thực thể) và các instance của nó
thường được gọi là “Entity” (thực thể). Các lớp entity ánh xạ vào các bảng
bên trong một CSDL. Các thuộc tính của các lớp thông thường ánh xạ vào
các cột trong bảng. Mỗi instance của một lớp thực thể biểu diễn một dòng
trong bảng.
Các lớp thực thể trong LINQ to SQL không cần phải kế thừa từ một lớp đặc
biệt nào khác, điều đó cho phép bạn có thể cho phép chúng thừa kế từ bất cứ
đối tượng nào bạn muốn. Tất cả các lớp được tạo ra dùng LINQ to SQL
designer đều được định nghĩa như “partial class” – có nghĩa là bạn có thể
viết thêm code để thêm vào các thuộc tính, phương thức và sự kiên cho
chúng.

Không giống như chức năng DataSet/TableAdapter có trong VS 2005, khi
dùng LINQ to SQL designer, bạn không cần chỉ ra câu truy vấn SQL được
dùng để tạo ra mô hình và lớp truy xuất dữ liệu.
Thay vào đó, bạn tập trung chủ yếu vào việc định nghĩa các lớp thực thể,
cách chúng ánh xạ vào CSDL, và mối quan hệ giữa chúng. Trình LINQ to
SQL cụ thể mà bạn dùng sẽ đảm bảo việc sinh ra các lệnh SQL thích hợp
vào lúc chạy khi bạn tương tác và làm việc với các thực thể dữ liệu. Bạn có
thể dùng cú pháp truy vấn LINQ để chỉ ra cách bạn muốn truy vấn dữ liệu.
Tạo các lớp thực thể từ CSDL
Nếu đã có cấu trúc cho CSDL, bạn có thể dùng nó để tạo các lớp thực thể
LINQ to SQL một cách nhanh chóng.
Các dễ dàng nhất để làm điều này là mở CSDL trong cửa sổ Server Explorer
bên trong Visual Studio, chọn các table và view mà bạn muốn mô hình hóa,
và kéo thả chúng lên trên của sổ LINQ to SQL designer.

Khi bạn thêm 2 bảng (Categories and Products) và 1 view (Invoices) từ
CSDL “Northwind” vào cửa sổ LINQ to SQL designer, bạn sẽ có thêm 3 lớp
thực thể được tạo ra một cách tự động:

