Sử dụng LINQ(LINQ to SQL)

99 353 0
Sử dụng LINQ(LINQ to SQL)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

MỤC LỤC Phần 1: Sử dụng LINQ(LINQ to SQL) LINQ to SQL g ì ? Mô hình hóa CSDL dùng LINQ to SQL: Các ví dụ LINQ to SQL 1) Lấy Product từ CSDL 2) Cập nhật sản phẩm CS DL 3) Chèn thêm phân loại hai sản phẩm vào CS DL 4) Xóa sản phẩm 5) Gọi thủ tục 6) Lấy sản phẩm phân trang Tổng kết Phần :Định nghĩ a lớp mô hì nh liệu (LINQ to SQL) Tạo mô hình liệu LINQ to SQL 10 Các lớp thực thể 11 Tạo lớp thực thể từ CSDL 12 Cách đặt tên ngữ pháp số nhiều 13 Quan hệ thực thể 13 Delay/ Lazy Loading 14 Dùng Stored Procedure 15 Dùng SPROCS để cập nhật/xóa,thêm liệu 16 Tổng kết 17 Phần 3:Truy vấn CSDL LINQ 18 Mô hình hóa CSDL Northwind dùng LINQ to SQL 18 Lấy sản phẩm 18 Trực quan hóa câu truy vấn LINQ to SQL trình gỡ lỗi 19 Gắn nối câu truy vấn LINQ to SQL vào control LINQ to SQL 21 Data Sharpi ng 22 Phân trang kết truy vấn 26 Tổng kết 28 Phần 4:Cập nhật sở liệu (LINQ to SQL) 29 CSDL Northwind mô h ình hóa dùng LINQ to SQL 29 Change Tracking DataContext.Submit Changes() 30 Các ví dụ Insert Delete 32 Xóa sản phẩm 32 Cập nhật thông qua quan hệ 33 Transactions 34 Kiểm tra liệu Business Logic 35 Hỗ trợ kiểm tra giá trị thuộc tính dựa schema CSDL 35 Hỗ trợ tùy biến việc kiểm t giá t rị thuộc tính 35 Hỗ trợ tùy biến việc kiểm t tính hợp lệ thực thể 37 Tùy biến phương thức kiểm t việc thêm/ xóa/sửa liệu 37 Xử lý thay đổi đồng thời với Optimistic Concurrency: 39 Dùng SPROCs tùy biến logic câu SQL: 40 Phần 5:Sử dụng asp:LinqDataSource (LINQ to SQL) 40 Ứng dụng mẫu mà xây dựng: 40 giúp cho chúng ta? 42 Bước 1: Định nghĩa mô hình liệu 43 Bước 2: Tạo danh sách sản phẩm 43 Bước 3: Bỏ cột không cần thiết 48 Xóa bớt cột không cần thiết 48 Xóa cột SupplierID CategoryID 49 Bước 4: Lọc danh sách sản phẩm 51 Bước 5: Thêm quy tắc kiểm tra logic 54 Một ví dụ quy tắc logic 54 Thêm quy tắc kiểm tra mô hình liệu 55 Thêm phần kiểm soát lỗi vào giao diện 56 Tổng kết 57 Phần 6:Lấy liệu dùng Stored Procedure (LINQ to SQL) 58 Dùng SPROC hay không SPROC? Đó vấn đề… 58 Các bước ánh xạ gọi SPROC dùng LINQ to SQL 60 Cách ánh xạ SPROC vào DataContext LINQ 61 Cách gọi SPROC tạo 63 Ánh xạ kiểu trả phương thức SPROC vào lớp mô hình liệu 65 Xử lý tham số thủ tục dạng OUTPUT 66 Xử lý thủ tục trả nhiều kiểu kết khác 68 Hỗ trợ hàm người dùng tự định nghĩa (UDF) 71 Tổng kết 72 Phần 7:Cập nhật liệu dùng Stored Procedure(LINQ to SQL) 72 Bước 1: Tạo lớp truy xuất liệu (chưa dùng đến thủ tục) 72 Thêm quy tắc kiểm tra liệu vào lớp mô hình liệu 73 Thêm phương thức GetCustomer() vào lớp DataContext 75 Bước 2: Dùng lớp truy cập liệu (chưa sử dụng SPROC) 76 Chờ giây – Tôi nghĩ viết định nói việc dùng SPROC mà ??? 77 Cách sử dụng SPROC để thực Insert/Update/Delete 78 Bước 3: Thêm Order cách dùng SPROC 78 Bước 4: Thực h iện cập nhật dùng SPROC 82 Bước 5: Dùng lớp DAL lần 86 Một số ưu điểm việc dùng SPROC 86 Tổng kết 87 Phần 8:Thực thi biểu thức SQL tùy biến (LINQ to SQL) 87 Dùng câu truy vấn SQL tùy biến với LINQ to SQL 90 Dùng ExecuteQuery 90 Tùy biến biểu thức SQL theo vết (tracking) thao tác cập nhật: 91 Tùy biến biểu thức SQL với lớp bạn 91 Tùy biến câu SQL cho Inserts/Updates/Deletes 92 Tổng kết 93 Phần 9: Dùng biểu thức LINQ tùy biến với (LINQ to SQL) 93 Tóm tắt: dùng với mệnh đề where khai báo 93 Dùng kiện Selecting với 95 Thực phép chiếu truy vấn với kiện Selecting 98 Phần 1: Sử dụng LINQ(LINQ to SQL) LINQ to SQL ? LINQ to SQL phiên thực hóa O/RM (object relational mapping) có bên NET Framework “Orcas” (nay NET 3.5), cho phép bạn mô hình hóa sở liệu dùng lớp NET Sau bạn truy vấn sở liệu (CSDL) dùng LINQ, cập nhật/thêm/xóa liệu từ LINQ to SQL hỗ trợ đầy đủ transaction, view stored procedure (SP) Nó cung cấp cách dễ dàng để thêm khả kiểm tra tính hợp lệ liệu quy tắc vào mô hình liệu bạn Mô hình hóa CSDL dùng LINQ to SQL: Visual Studio “Orcas” tích hợp thêm trình thiết kế LINQ to SQL công cụ dễ dàng cho việc mô hình hóa cách trực quan CSDL dùng LINQ to SQL Bài viết sau sâu vào cách dùng trình thiết kế (bạn xem đoạn video để xem cách tạo mô hình LINQ to SQL) Bằng cách dùng trình thiết kế LINQ to SQL, dễ dàng tạo mô hình cho CSDL mẫu “Northwind” giống đây: Mô hình LINQ to SQL định nghĩa bốn lớp thực thể: Product, Category, Order OrderDetail Các thuộc tính lớp ánh xạ vào cột bảng tương ứng CSDL Mỗi instance lớp biểu diễn dòng bảng liệu Các mũi tên bốn lớp thực thể biểu diễn quan hệ thực thể khác nhau, chúng tạo dựa mối quan hệ primary-key/foreign-key CSDL Hướng mũi tên mối quan hệ – hay – nhiều Các thuộc tính tương ứng thêm vào lớp thực thể trường hợp Lấy ví dụ, lớp Category có mối quan hệ nhiều với lớp Product, điều có nghĩa có thuộc tính “Categories” tập hợp đối tượng Product Category Lớp Product có thuộc tính “Category” đến đối tượng ”Category” chứa Product bên Bảng phương thức bên tay phải bên trình thiết kế LINQ to SQL chứa danh sách SP để tương tác với mô hình liệu Trong ví dụ thêm thủ tục có tên “GetProductsByCategory” Nó nhận vào categoryID trả chuỗi Product Chúng ta xem cách gọi thủ tục đoạn code bên Tìm hiểu lớp DataContext Khi bạn bấm nút “Save” bên hình thiết kế LINQ to SQL, Visual Studio lưu lớp NET biểu diễn thực thể quan hệ bên CSDL mà vừa mô hình hóa Cứ file LINQ to SQL thêm vào solution, lớp DataContext tạo ra, dùng cần truy vấn hay cập nhật lại thay đổi Lớp DataContext tạo có thuộc tính để biểu diễn mối bảng mô hình hóa từ CSDL, phương thức cho SP mà thêm vào Lấy ví dụ, lớp NorthwindDataContext sinh dựa mô hình tạo trên: Các ví dụ LINQ to SQL Một mô hình hóa CSDL dùng trình thiết kế LINQ to SQL, dễ dàng viết đoạn lệnh để làm việc với Dưới vài ví dụ thao tác chung xử lý liệu: 1) Lấy Product từ CSDL Đoạn lệnh dùng cú pháp LINQ để lấy tập IEnumerable đối tượng Product Các sản phẩm lấy phải thuộc phân loại “Beverages”: C#: VB: 2) Cập nhật sản phẩm CSDL Đoạn lệnh cho thấy cách lấy sản phẩm, cập nhật lại giá tiền lưu lại CSDL C#: VB: 3) Chèn thêm phân loại hai sản phẩm vào CSDL Đoạn mã biểu diễn cách tạo phân loại mới, tạo hai sản phẩm đưa chúng vào phân loại tạo Cả ba sau đưa vào sở liệu Chú ý không cần phải tự quản lý mối quan hệ primary key/foreign key, thay vào đó, đơn giản thêm đối tượng Product vào tập hợp Products đối tượng category, thêm đối tượng category vào tập hợp Categories DataContext, LINQ to SQL biết cách thiết lập giá trị primary key/foreign key cách thích hợp (Add thay đổi InsertOnSubmit phiên tại) C# VB: 4) Xóa sản phẩm Đoạn mã sau biểu diễn cách xóa tất sản phẩm Toy khỏi CSDL: (RemoveAll thay đổi DeleteAllOnSubmit phiên tại) C#: VB: 5) Gọi thủ tục Đoạn mã biểu diễn cách lấy thực thể Product mà không dùng cú pháp LINQ, mà gọi đến thủ tục “GetProductsByCategory” thêm vào trước Nhớ lấy kết quả, cập nhật/xóa sau gọi db.SubmitChanges() để cập nhật thay đổi trở lại CSDL C#: VB: 6) Lấy sản phẩm phân trang Đoạn mã biểu diễn cách phân trang server phần câu truy vấn LINQ Bằng cách dùng toán tử Skip() Take(), trả 10 dòng từ CSDL – dòng 200 C#: VB: Tổng kết LINQ to SQL cung cấp cách hay, rõ ràng để mô hình hóa lớp liệu ứng dụng bạn Một định nghĩa mô hinh liệu, bạn dễ dàng thực câu truy vấn cập nhật, xóa, sửa liệu cách hiệu Hi vọng hướng dẫn ví dụ mẫu giúp bạn làm quen với LINQ Tôi tiếp tục viết để giúp bạn khám phá LINQ to SQL cách chi tiết Phần :Định nghĩa lớp mô hình liệu (LINQ to SQL) Trong viết đầu tiên, cung cấp đoạn code mẫu để biểu diễn cách xử lý liệu dùng LINQ to SQL, bao gồm: Cách truy vấn liệu Các cập nhật liệu Cách chèn tạo quan hệ dòng CSDL Cách xóa dòng CSDL Cách gọi thủ tục Cách lấy liệu phân trang server Tôi thực tất thao tác liệu cách dùng mô hình liệu LINQ to SQL giống đây: Trong này, vào chi tiết cách tạo mô hình liệu LINQ to SQL giống LINQ to SQL, LINQ to SQL, tất tính khác mà nói đến loạt đượccoi phần NET 3.5 Visual Studio “Orcas” (nay Visual Studio 2008) Bạn làm theo tất bước cách tải Visual Studio 2008 Visual Web Developer Express Cả hai cài đặt dùng đồng thời với Visual Studio 2005 Tạo mô hình liệu LINQ to SQL Bạn thêm mô hình liệu LINQ to SQL dự án ASP.NET, Class Library hay Windows cách dùng tùy chọn “Add New Item” bên Visual Studio chọn “LINQ to SQL”: Việc chọn mục “LINQ to SQL” khởi chạy LINQ to SQL designer, cho phép bạn mô hình hóa lớp mà biểu diễn CSDL quan hệ Nó tạo lớp kiểu “DataContext”, có thuộc tính để biểu diễn bảng mà mô hình hóa CSDL, phương thức cho Stored Procedure mà mô hình hóa Như mô tả phần loạt này, lớp DataContext thành phần trung tâm mô hình, toàn thao tác truy vấn cập nhật liệu thực thông qua lớp Dưới ảnh chụp hình sổ thiết kế LINQ to SQL, mà bạn thấy tạo mô hình 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 lớp ánh xạ vào CSDL Các lớp thường “Entity Class” (lớp thực thể) instance thường gọi “Entity” (thực thể) Các lớp entity ánh xạ vào bảng bên CSDL Các thuộc tính lớp thông thường ánh xạ vào cột bảng Mỗi instance lớp thực thể biểu diễn dòng bảng Các lớp thực thể LINQ to SQL không cần phải kế thừa từ lớp đặc biệt khác, điều cho phép bạn cho phép chúng thừa kế từ đối tượng bạn muốn Tất lớp tạo dùng LINQ to SQL designer định nghĩa “partial class” – có nghĩa bạn viết thêm code để thêm vào thuộc tính, phương thức kiên cho chúng Bước 5: Dùng lớp DAL lần Một cập nhật lớp truy cạp liệu (DAL) để dùng SPROC thay câu lệnh SQL động, bạn chạy lại câu lệnh tương tự câu lệnh ta làm bước để làm việc với lớp mô hình liệu: Giờ việc cập nhật đối tượng Customer, việc thêm đối tượng Order thực thi thông qua thủ tục tạo thay dùng câu SQL động Các quy tắc kiểm tra thực thi hệt trước đây, câu lệnh dùng để sử dụng lớp mô hình liệu hoàn toàn tương tự Một số ưu điểm việc dùng SPROC Sau vài ý nhỏ có ích cho bạn việc dùng SPROC: Dùng tham số dạng output: Trong phần trên, biểu diễn cách trả giá trị OrderID tạo (đây cột tự tăng CSDL) cách dùng tham số dạng output Bạn không bị giới hạn việc trả cột tự tăng – mà thật bạn trarveef giá trị cho tham số SPROC Bạn dùng cách tiếp cận cho trường hợp Insert Update LINQ to SQL lấy giá trị trả dùng để cập nhật giá trị thuộc tính đối tượng mô hình liệu mà không cần thực thi thêm câu truy vấn thứ để lấy giá trị tạo Sẽ SPROC phát lỗi? Nếu SPROC phát lỗi thực việc Insert/Update/Delete, LINQ to SQL tự động hủy rollback toàn thay đổi tạo transaction kết hợp với lời gọi SubmitChanges() Điều đảm bảo liệu bạn trạng thái đắn Tôi viết code thay dung ORM designer để gọi SPROC? Như nói phần đầu viết này, bạn dùng LINQ to SQL designer để ánh xạ thao tác thêm/sửa/xóa vào SPROC, bạn thêm phương thức partial vào lớp DataContext viết lệnh gọi chúng Đây ví dụ cách viết phương thức lớp partial NorthwindDataContext dùng UpdateCustomer để gọi thủ tục: Đoạn lệnh thực tạo bạn dùng LINQ to SQL designer để ánh xạ SPROC kết hợp với thao tác cập nhật đối tượng Customer Bạn xem điểm khởi đầu sau tiếp tục thêm lệnh xử lý bạn muốn (ví dụ: dùng giá trị trả SPROC để phát exception tương ứng với mã lỗi nhận được, optimistic concurrency…) Tổng kết LINQ to SQL trình ánh xạ đối tượng (ORM) mềm dẻo Nó cho phép bạn viết đoạn code theo kiểu hướng đối tượng cách rõ ràng, sang sủa để lấy, cập nhật hay thêm liệu Hơn hết, cho phép bạn thiết kế lớp mô hình liệu mộ cách dễ dàng, không phụ thuộc vào cách lưu hay nạp lại từ CSDL Bạn có thêt dùng trình ORM xây dựng sẵn để lấy hay cập nhật liệu cách hiệu cách dùng câu SQL động Hoặc bạn cấu hình lớp liệu để dùng SPROC Điều đoạn lệnh bạn để dùng lớp liệu này, thủ tục để kiểm tra logic không phụ thuộc vào cách lưu/nạp liệu thực dùng Phần 8:Thực thi biểu thức SQL tùy biến (LINQ to SQL) Trong hai cuối (bài 7), biểu diễn cách bạn dùng thủ tục CSDL (SPROC) để thực truy vấn, cập nhật, thêm xóa liệu dùng mô hình liệu LINQ to SQL Có vài bạn hỏi viết “Liệu kiểm soát hoàn toàn câu SQL dùng LINQ to SQL mà không cần phải viết SPROC?” Trong viết nói điều – thảo luận cách bạn viết câu SQL tùy biến để truy vấn, để thêm, sửa hay xóa liệu Dùng biểu thức truy vấn LINQ với LINQ to SQL Trong viết này, dùng mô hình mô hình liệu tạo với CSDL Northwind (xin đọc phần để học cách dùng VS 2008 để tạo mô hình này): Trong phần 3, cho bạn thấy cách dùng ngôn ngữ LINQ đưa vào VB C# để truy vấn mô hình liệu trả tập đối tượng biểu diễn dòng/cột CSDL Ví dụ, bạn thêm phương thức trợ giúp “GetProductsByCategory” vào lớp DataContext mô hình liệu mà dùng truy vấn LINQ để trả đối tượng Product từ CSDL: VB: C#: Một bạn định nghĩa phương thức LINQ trên, bạn viết lệnh giống để dùng lấy sản phẩm, duyệt qua tập kết trả về: VB: Khi biểu thức LINQ bên phương thức “GetProductsByCategory” thực thi, trình quản ly LINQ to SQL tự động thực thi câu SQL động để lấy liệu Product tạo danh sách đối tượng Product Bạn dùng trình debug để xem cách biểu thức LINQ thực thi Dùng câu truy vấn SQL tùy biến với LINQ to SQL Trong ví dụ mẫu không viết câu lệnh SQL để truy vấn liệu lấy đống tượng có kiểu Product Thay vậy, LINQ to SQL tự đọng dịch biểu thức LINQ thành câu lệnh SQL thực thi CSDL Nhưng liệu muốn kiểm soát hoàn toàn câu lệnh SQL thực thi với CSDL, không muôn LINQ to SQL làm điều tự động? Một cách để làm điều dùng SPROC giống trình bày Một cách khác dùng phương thức “ExcecuteQuery” lớp DataContext để thực thi câu SQL cung cấp Dùng ExecuteQuery Phương thức ExecuteQuery nhận vào câu SQL, với tập tham số mà ta dùng để tạo nên câu SQL Bằng cách dùng nó, bạn thực thi câu lệnh SQL bạn muốn với CSDL (kể câu lệnh JOIN nhiều bảng) Điều làm cho ExecuteQuery thực hữu dụng cho phép bạn cách trả liệu Bạn làm điều cách truyền đối tượng có kiểu mong muốn tham số phương thức, hay dùng kiểu generic Ví dụ, bạn thay đổi phương thức GetProductsByCategory() tạo trước – phiên dùng biểu thức LINQ – để dùng phương thức ExecuteQuery thực thi câu SQL với CSDL trả tập đối tượng Product kết quả: VB: C#: Chúng ta gọi GetProductsByCategory() dùng cách trước đây: Nhưng không trước đây, trường hợp câu SQL tùy biến gọi thay cho câu SQL động tạo biểu thức LINQ Tùy biến biểu thức SQL theo vết (tracking) thao tác cập nhật: Mặc nhiên, bạn lấy mô hình liệu dùng LINQ to SQL, lưu lại thay đổi mà bạn làm Nếu gọi phương thức “SubmitChanges()” lớp DataContext, lưu lại thay đổi vào CSDL Tôi nói chi tiết vấn đề phần loạt Một tính trọi ExecuteQuery kết hợp hoàn toàn vào trình theo vết cập nhật lại mô hình liệu Ví dụ, bạn viết đoạn lệnh để lấy tất sản phẩm từ chủng loại giảm giá toàn 10%: Bởi rõ kiểu trả câu lệnh ExecuteQuery phương thức GetProductsByCategory, LINQ to SQL biết cách để dò thay đổi đối tượng Product mà trả về, gọi “SubmitChanges()” đối tượng đó, chúng lưu lại SCDL Tùy biến biểu thức SQL với lớp bạn Phương thức ExecuteQuery() cho phép bạn lớp kiểu trả câu truy vấn Lớp không thiết phải tạo trình LINQ to SQL designer, hay phải thừa kế từ class/interface Ví dụ, bạn định nghĩa lớp ProductSummary chứa thuộc tính tập Product (chú ý dùng đặc tính Automatic Properties có C#): Chúng ta sau tạo phương thức tên GetProductSummariesByCategory() lớp NorthwindDataContext, trả kết dựa kiểu ProductSummary Để ý câu SQL yêu cầu thuộc tính Product cần – ExecuteQuery tự biết cách đưa giá trị vào đối tượng ProductSummary mà trả Sau dùng phương thức để truy vấn duyệt qua tập kết trả về: Tùy biến câu SQL cho Inserts/Updates/Deletes Thêm vào việc dùng biểu thức SQL tùy biến để truy vấn, bạn dùng chúng để thực thao tác thêm/xóa/sửa Chúng ta làm điều cách tạo phương thức partial lớp DataContext tương ứng thao tác Insert/Update/Delete cho thực thể mà muốn thay đổi Và sau dùng phương thức ExecuteCommand để thực thi câu SQL cần thiết Ví dụ, để thay hành vi Delete cho lớp Product, bạn định nghĩa phương thức partial DeleteProduct sau: Và bây giờ, bạn viết đọa code để xóa Product khỏi CSDL, LINQ to SQL gọi phương thức DeleteProduct – câu SQL tùy biến thực thi thay cho câu SQL sinh tự động LINQ to SQL: Tổng kết Trình quản lý LINQ to SQL tự động tạo thực thi câu SQL động để thực câu truy vấn, cập nhật, thêm xóa liệu CSDL Đối với số trường hợp, bạn muốn kiểm soát hoàn toàn câu lệnh SQL thực thi, bạn dùng thủ tục SPROC, hay viết câu SQL riêng bạn Điều cung cấp khả tùy biến mạnh mẽ xây dựng lớp truy cập liệu Phần 9: Dùng biểu thức LINQ tùy biến với (LINQ to SQL) Trong phần loạt giới thiệu control NET 3.5 nói cách dùng để gắn nối control ASP.NET dễ dàng vào mô hình liệu LINQ to SQL Tôi trình bày chút cách dùng chúng viết sau nói control Trong hai viết trên, câu truy vấn thực tương đối dễ hiểu (mệnh đề Where làm việc với bảng liệu) Trong viết hôm biểu diễn cách tận dụng khả xây dựng câu truy vấn nhanh chóng với LINQ dùng LinqDataSource, cách bạn dùng biểu thức LINQ để thực truy vấn với Tóm tắt: dùng với mệnh đề where khai báo Trong viết biểu diễn cách bạn dùng lọc có sẵn LinqDataSource để khai báo nhanh lọc mô hình liêu LINQ to SQL Ví dụ, cho bạn tạo mô hình liệu LINQ to SQL CSDL Northwind (cách dùng nói đến phần cuẩ loạt này), có khai báo control trang với mệnh để mà trả sản phẩm thuộc chủng loại (được qua tham số “categoryid” chuỗi query string): Chúng ta trỏ control <asp:gridview> đến datasource tạo cho phép phân trang, chỉnh sửa xếp: Khi chạy trang trên, có GridView với khả tự động xếp, phân trang chỉnh sửa liệu liệu có mô hình liệu chúng ta: Dùng cách khai báo tham số cho where giống làm việc tốt hầu hết trường hợp Nhưng bạn muốn câu lệnh lọc phức tạp hơn? Ví dụ, muốn hiển thị sản phẩm tạo bới nhà cung cấp dựa tập động quốc gia? Dùng kiện Selecting với Để xử lý trường hợp trên, bạn tạo hàm xử lý cho kiện “Selecting” thuộc control <asp:LinqDataSourc> Bên hàm xử lý kiện này, bạn viết đoạn lệnh bạn muốn để lấy tập kết Bạn làm điều với câu truy vấn LINQ, gọi thủ tục SPROC hay dùng biểu thức SQL tùy biến Một lấy liệu về, cần làm gán cho thuộc tính “Result” đối tượng LinqDataSourceSelectEventArgs Control <asp:LinqDataSourc> đói dùng tập kết bạn trả để làm việc Ví dụ, câu truy vấn LINQ to SQL để lấy sản phẩm từ nhà cung cấp thuộc nước chọn: VB: C#: Ghi chú: Bạn không cần viết câu truy vấn bên hàm xử lý kiện Một cách tiếp cận sáng sủa đưa câu lệnh truy vấn vào hàm trợ giúp, sau gọi lại chúng từ hàm xử lý kiện Tôi dùng cách tiếp cận phần đầu (dùng hàm trợ giúp GetProductsByCategor) Bây giờ, cách dùng hàm xử lý Selecting, chạy bạn thấy sản phẩm cung cấp nhà cung cấp đến từ quốc gia mà cho trước Một điều thật thú vị chức phân trang xếp làm việc với GridView – chuyển sang dùng kiện Selecting Và quan trọng việc phân trang xếp thực bên CSDL – có nghĩa lấy 10 sản phẩm từ CSDL mà cần để hiển thị cho trang GridView, điều giúp việc thực thi hiệu nhiều Bạn có lẽ tự hỏi – có thẻ hỗ trợ việc xếp phân trang hiệu ta dùng kiện Selecting? Lý câu truy vấn LINQ không thực thi tới chừng bạn chưa lấy kết trả (deferred execution model) Ưu điểm mô hình cho phép bạn dễ dàng soạn câu truy vấn trước thực thi nó, dễ dàng đưa thêm tính “add-on” Bạn tìm hiểu kỹ phần loạt Trong hàm xử lý kiện “Selecting” khai báo câu truy vấn LINQ muốn thực thi sau gán vào thuộc tính e.Query Mặc dù vậy, câu lênh LINQ không thực thi không lấy kêt (bằng cách dùng hàm ToArray() hay ToList()) LINQDataSource sau thêm mệnh đề order by, nối thêm hàm mở rộng Take() Skip(), nhờ mà tập kết phân trang xếp Chỉ LINQDataSource thực câu lệnh LINQ lấy liệu về, LINQ to SQL đảm bảo việc xếp phân trang thực bên CSDL – có 10 dòng trả Chú ý dùng GridView để chỉnh sửa xóa liệu, dùng kiện “Selecting” LinqDataSource: Khả hỗ trợ việc xóa/sửa liệu làm việc chừng thuộc tính Query kiện Selecting gán tập thực thể loại (ví du: dãy đối tượng kiểu Product, Supplier, Category, Order…) LINQDataSource tự động xử lý trường hợp UI control thực việc cập nhật Để học thêm cách cập nhật LINQ to SQL, xin đọc lại loạt Và sau đọc tiếp để xem cách cập nhật với LINQDataSource Thực phép chiếu truy vấn với kiện Selecting Một điểm mạnh LINQ khả trả “dạng” liệu tùy biến, hay gọi phép chiếu liệu Đó khả mà bạn trả tập giá trị thực thể (một số cột mà thôi), hay trả giá trị tính toán tự động biểu thức bạn định nghĩa Bạn tìm hiểu thêm cách LINQ thực phép chiếu phần loạt Ví dụ, bạn sửa lại kiện hàm xử lý kiện Selecting để đưa thông tin vào cho GridView tập tùy biến giá trị Product Trong grid này, ta hiển thị ProductID, ProductName, Product UnitPrice, số lệnh đặt hàng sản phẩm (Number of Orders), doanh thu sản phẩm (Revenue) Chúng ta tính toán động giá trị cuối dùng biểu thức LINQ đây: VB: C#: Ghi chú: hàm Sum dùng để tính toán Revenue ví dụ “Phương thức mở rộng” (Extension Method) Tham số truyền cho hàm ví dụ biểu thức Lambda Kiểu trả tạo biểu thức LINQ kiểu vô danh (anonymous type) hình thành từ biểu thức truy vấn Extension Methods, Lambda Expressions, Anonymous Types đặc tính VB C# VS 2008 Kết biểu thức LINQ gắn nối vào GridView tương tự sau: Ghi việc phân trang xếp làm việc bình thường với GridView – chuyển sang dùng câu lệnh LINQ tùy biến Dù vậy, có tính không làm việc dùng phép chiếu liệu, việc hỗ trợ cập nhật liệu GridView Đó LINQDataSource cách để cập nhật liệu cách an toàn Nếu muốn thêm khả cập nhật vào cho GridView để hỗ trợ kiểu trả tùy biến vậy, phải chuyển sang dùng control ObjectDataSource (ta phải cung cấp thêm phương thức Update để xử lý việc cập nhật), phải cung cấp thêm trang để người dùng cập nhật – hiển thị môt DetailsView hay FormViewgắn nối thực thể Product để chỉnh sửa Tổng kết Bạn dễ dàng thực thao tác truy vấn thường dùng với mô hình liệu LINQ to SQL dùng khả khai báo bọ lọc LINQDataSource Để thực biểu thức lọc phức tạp hơn, bạn tận dụng ưu điểm kiên Selecting có LINQDataSource Điều cho phép bạn thực logic bạn muốn để lấy dòng liệu phù hợp Bạn nhiều cách để lấy liệu này, chẳng hạn dùng Query Expressions, gọi Stored Procedures, hay thực câu truy vấn tùy biến [...]... hơn đơn đặt hàng: Chú ý cách chúng ta đã dùng tập hợp “OrderDetails” mà LINQ to SQL đã tạo trên mỗi lớp Product (nhờ vào mối quan hệ một-nhiều mà chúng ta đã mô hình hóa trong trình thiết kế LINQ to SQL) Trực quan hóa các câu truy vấn LINQ to SQL trong trình gỡ lỗi Các trình ánh xạ O/R (Object relational mapper) như LINQ to SQL tạo ra và thực thi các câu lệnh SQL một cách tự động mỗi khi bạn thực hiện... điều thực sự thú vị về LINQ to SQL là nó cho phép xem rất dễ dàng câu lệnh SQL được thực thi thực sự khi bạn chạy ứng dụng trong chế độ gỡ lỗi Bắt đầu từ bản Beta2 của VS 2008, bạn có thể dùng một LINQ to SQL visualizer plug-in để xem một cách dễ dàng (và kiểm tra) bất kỳ câu lệnh truy vấn LINQ to SQL nào Chỉ cần đặt một breakpoint và di chuột lên trên một câu lệnh LINQ to SQL, sau đó nhấn vào biểu... rằng câu lệnh mà LINQ to SQL thực thi là thực sự, thực sự tốt Gắn nối các câu truy vấn LINQ to SQL vào các control LINQ to SQL Các câu truy vấn LINQ trả về kết quả mà nó sẽ implement interrface IEnumerable – đây cũng là interface mà các control ASP.NET dùng để hỗ trợ gắn nối các đối tượng Điều này có nghĩa là bạn có thể gắn nối kết quả của bất kỳ câu lệnh LINQ, LINQ to SQL hay LINQ to XML vào bất kỳ control... like the product instances above, LINQ to SQL will by default keep track of any changes or updates we later make to these objects We can make any number of queries and changes we want using a LINQ to SQL DataContext, and these changes will all be tracked together Khi chúng ta thực hiện các câu truy vấn và lấy về các đối tượng như đối tượng product ở trên, LINQ to SQL sẽ mặc nhiên lưu lại vết của các... Category đó Nếu bạn không thích cách mà trình thiết kế đã mô hình hóa hoặc đặt tên, bạn hoàn to n có thể chỉnh sửa lại Chỉ cần click lên mũi tên chỉ ra quan hệ trên của sổ soạn thảo và truy cập vào các thuộc tính của nó thông qua bảng thuộc tính để đổi tên, chỉnh sửa hoặc thậm chí xóa nó Delay/Lazy Loading LINQ to SQL cho phép chỉ ra các thuộc tính của một thực thể sẽ được lấy về trước(prefetch) hay chỉ... LINQ to SQL designer sẽ khai báo SPROC để trả về một tập kết quả có kiểu IEnumerable : Sau đó tôi có thể dùng cú pháp LINQ to SQL hay gọi thẳng phương thức ở trên để lấy về các thực thể từ CSDL: Dùng SPROCS để cập nhật/xóa,thêm dữ liệu Mặc nhiên LINQ to SQL sẽ tự động tạo ra các biểu thức SQL phù hợp cho bạn mỗi khi muốn cập nhật/xóa/thêm dữ liệu Ví dụ, nếu bạn viết mã LINQ to SQL... xác câu lệnh LINQ to SQL mà LINQ to SQL sẽ dùng để lấy về các đối tượng Product: Nếu bạn nhấn nút “Execute” trên cửa sổ này, nó sẽ cho phép bạn chạy câu lệnh SQL trực tiếp trong trình debugger và xem một cách chính xác dữ liệu được trả về: Điều này rõ ràng làm cho việc xem những gì LINQ to SQL làm cho bạn trở thành cực kỳ dễ dàng Nhớ rằng bạn có thể dễ dàng thay thế câu SQL mà LINQ to SQL thực thi nếu... trên hoàn to n được thực hiện ở lớp ánh xạ LINQ to SQL – có nghĩa là tất cả những đoạn lệnh mà tôi đã viết trước đây đều có thể tiếp tục làm việc mà không cần thay đổi bất ký điều gì Điều này giúp tránh phải thay đổi lại code ngay cả nếu sau này bạn muốn dùng một hàm SPROC tối ưu hơn sau này Tổng kết LINQ to SQL cung cấp một cách thức đơn giản, sáng sủa để mô hình hóa lớp dữ liệu trong ứng dụng của... to SQL sẽ dùng hàm ROW_NUMBER() để thực hiện việc phân trang logic trong CSDL Nó đảm bảo rằng chỉ 10 dòng dữ liệu được trả về khi chúng ta thực hiện các câu lệnh trên: Nó làm cho việc phân trang hiệu quả và dễ dàng hơn, đặc biệt là với các tập dữ liệu lớn Tổng kết Hi vọng các bước trên đã cung cấp một cái nhìn đầy đủ về những đặc tính mà LINQ to SQL cung cấp Phần 4:Cập nhật cơ sở dữ liệu (LINQ to SQL). .. nhật, chỉnh sửa và xóa dữ liệu Tôi cũng sẽ cho các bạn thấy các chúng ta có thể thêm các quy tắc (business rule – sau này trở đi tôi sẽ để nguyên từ business rule, vì từ này rõ nghĩa hơn) và tùy biến cách xác thực tính hợp lệ của dữ liệu CSDL Northwind được mô hình hóa dùng LINQ to SQL Trong phần 2 của loạt bài này, tôi đã đi qua các bước để tạo nên mô hình các lớp LINQ to SQL dùng LINQ to SQL designer ... 95 Thực phép chiếu truy vấn với kiện Selecting 98 Phần 1: Sử dụng LINQ(LINQ to SQL) LINQ to SQL ? LINQ to SQL phiên thực hóa O/RM (object relational mapping) có bên NET Framework... designer support to make it easy to connect up our GridView (or any other ASP.NET server control) to LINQ data To bind our grid above to the data model we created earlier, we can switch into design-view,... kiểm tra tạo trước Điều cung cấp khả tùy biến lớn cho bạn xây dựng ứng dụng Phần 5: Sử dụng asp:LinqDataSource (LINQ to SQL) Trong viết này, khám phá control có ASP.NET thuộc

Ngày đăng: 03/12/2015, 17:29

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan