Ngôn ngữ LINQ - Thao tác gọi SPROC

Các bước ánh xạ và gọi SPROC dùng LINQ to SQL

Bước 1: Tạo một Store Procedure với tên sp_SelecetAllAuthor

CREATE PROCEDURE sp_SelectAllAuthor
AS
	Select * from Author
GO;

Trong phần đầu, chúng ta đã biết cách dùng LINQ to SQL designer để tạo ra một mô hình dữ liệu LINQ to SQL như dưới đây:

Bước 2: Ở cửa sổ trên có chứa 2 cửa sổ con, cửa sổ bên trái cho phép chúng ta định nghĩa mô hình dữ liệu sẽ ánh xạ vào CSDL, cửa sổ bên phải cho phép ánh xạ các thủ tục và hàm vào đối tượng DataContext, điều này cho phép chúng ta có thể thay thế các câu SQL động trong việc lấy dữ liệu về.

Cách ánh xạ một SPROC vào một DataContext của LINQ

Để ánh xạ một SPROC vào lớp DataContext, trước tiên hãy mở cửa sổ Server Explorer trong VS và mở danh sách các  SPROC trong CSDL:

Bước 3: Để ánh xạ vào SPROC ở trên vào DataBookStoreDataContext, bạn có thể kéo/thả nó từ cửa sổ Server Explorer lên trên cửa sổ LINQ to SQL designer. Việc này sẽ làm tự động sinh ra một thủ tục trong lớp DataContext của LINQ to SQL như dưới đây:

Lưu ý: sau khi kéo thả Store vào nhớ lưu lại, sau đó mới thao tác tiếp

Mặc nhiên tên của phương thức được tạo trong lớp DataBookStoreDataContext sẽ chính là tên của SPROC, và kiểu trả về của phương thức sẽ là một kiểu được tạo tự động với cách đặt tên theo dạng “[SprocName]Result”. Ví dụ: SPROC ở trên sẽ trả vef một dãy các đối tượng có kiểu “sp_SelectAllAuthor”. 

Cách gọi SPROC mới được tạo

Khi đã hoàn thành các bước trên để ánh xạ một SPROC vào lớp DataBookStoreDataContext của chúng ta, bạn có thể gọi nó một cách dễ dàng để lấy dữ liệu về. Tất cả những gì chúng ta cần làm là gọi phương thức mà chúng ta đã ánh xạ trong DataBookStoreDataContext để lấy về một chuỗi các đối tượng về từ SPROC:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DemoLinq
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var dataBook = new DataBookStoreDataContext())
            {
              
                //Truy Vấn Tác giả
                var author =  dataBook.sp_SelectAllAuthor();
                Console.WriteLine("---------------------------------------------------------------------------------------------------------------------------------");
                Console.WriteLine("ID       |   Ten tac gia\t\t|   Email\t\t|   Diachi");
                Console.WriteLine("---------------------------------------------------------------------------------------------------------------------------------");
                foreach (var a in author) {               
                    Console.WriteLine("{0,5}    |   {1,-20}\t| {2,-10}\t| {3,20}    ", a.AuthorID, a.AuthorName,a.AuthorEmail,a.AuthorAddress);
                    Console.WriteLine("---------------------------------------------------------------------------------------------------------------------------------");
                }
                
            }
        }
       
    }
}

Kết quả:

var author =  dataBook.sp_SelectAllAuthor(); để gọi Store

Vì kết quả trả về là danh sách nên dùng foreach để lấy tất cả dữ liệu trong đó.