STDIO
Tìm kiếm gần đây
    • 0

    LINQ to SQL - Giới Thiệu

    Giới thiệu LINQ to SQL, ý nghĩa và cú pháp cơ bản sử dụng LINQ to SQL trong truy vấn dữ liệu.
    20/12/2017
    02/08/2020
    8 phút đọc
    LINQ to SQL - Giới Thiệu

    Giới thiệu về LINQ

    Language Integrated Query (LINQ) là một bộ thư viện được tích hợp vào nền tảng .NET 3.5 trở đi (19/11/2007). Mục đích ra đời của LINQ là cung cấp thêm một giải pháp truy vấn dữ liệu từ các nguồn dữ liệu như hệ quản trị cơ sở dữ liệu, file XML, ... bên cạnh cách truyền thống thông qua các truy vấn SQL.

    LINQ to SQL hỗ trợ truy vấn dữ liệu thông qua cú pháp ngôn ngữ lập trình của C# hoặc Visual Basic .NET, là 1 phương pháp tăng hiệu suất (giảm thời gian) phát triển phần mềm.

    Vì sao là LINQ to SQL?

    Trong phát triển phần mềm, nhu cầu truy xuất và thao tác dữ liệu rất nhiều. Từ trước đến nay, sử dụng các truy vấn SQL để truy xuất và thao tác dữ liệu là việc mà các lập trình viên làm thường xuyên, nếu có thể tối ưu được về thời gian sẽ tăng được hiệu suất đáng kể.

    Xem xét ví dụ về một câu truy vấn SQL sau đây:

    SELECT RoomName FROM Room WHERE RoomID=1

    Như ví dụ trên, câu truy vấn có nghĩa như sau:

    • Lấy ra tên phòng RoomName.
    • Từ danh sách phòng Room.
    • Có mã phòng RoomID là 1.

    Với các hệ quản trị cơ sở dữ liệu khác nhau (SQL Server, MySQL, Oracle, ...), hoặc lưu trữ trong XML sẽ có các cú pháp truy vấn khác nhau và lập trình viên phải học lại 1 phần hoặc toàn bộ các truy vấn nếu có nhu cầu thay đổi hệ quản trị cơ sở dữ liệu, tốn rất nhiều thời gian và công sức.

    Để tối ưu hóa qui trình phát triển phần mềm, Microsoft cho ra đời LINQ, một dạng truy vấn dữ liệu thông qua ngôn ngữ lập trình C#/Visual Basic .NET (VB.NET) kết hợp với những từ khóa, toán tử của LINQ. Lập trình viên sử dụng quen với mã C# sẽ truy vấn cơ sở dữ liệu bằng C# thay vì các truy vấn SQL dạng chuỗi.

    Xem xét ví dụ trên nhưng được viết bằng cú pháp LINQ

    HotelManagementContext db = new HotelManagementContext();
    var query =  (from room in db.Rooms
    			Where room.RoomID==1
    			Select room).FirstOrDefault();

    Dễ dàng thấy được chất C# trong truy vấn trên, từ db.Rooms cho đến toán tử ==, phương thức FirstOrDefault().

    LINQ to SQL

    Vì sao LINQ to SQL ra đời?

    Mục đích ra đời của LINQ to SQL là để phục vụ cho hệ quản trị cơ sở dữ liệu SQL Server và nền tảng .NET nói chung hay ngôn ngữ lập trình C#/VB.NET nói riêng chứ không phải mục đích đại trà cho các ngôn ngữ lập trình hay các hệ quản trị cơ sở dữ liệu khác.

    Tuy nhiên cũng có nhiều loại LINQ được gọi là các Providers, trong đó có:

    • LINQ to SQL: phục vụ cho SQL Server.
    • LINQ to Entities: phục vụ cho nhiều loại hệ quản trị cơ sở dữ liệu hơn.
    • LINQ to Objects: Sử dụng với các Collections, như tìm kiếm, ... theo phong cách như truy vấn cơ sở dữ liệu.
    • LINQ to DataSets: Sử dụng kết hợp với ADO.NET.
    • LINQ to XML: phục vụ cho truy vấn XML.

    SQL Server là một hệ quản trị cơ sở dữ liệu theo mô hình quan hệ (RDBMS), mô hình CSDL quan hệ ghi các dữ liệu theo dòng trong các bảng dữ liệu.

    Giả sử cần dùng C# viết mã để lấy dữ liệu từ SQL Server nhưng tổ chức mô hình dữ liệu của C# và SQL Server là khác nhau. Để giải quyết tình trạng trên, một kỹ thuật gọi là ORM (Object Relational Mapping) ra đời nhằm mục đích chuyển đổi dữ liệu giữa các hệ thống khác (không phải là mô hình hướng đối tượng) sang các đối tượng trong ngôn ngữ lập trình hướng đối tượng. Tiếp đó LINQ to SQL ra đời dựa trên kỹ thuật ORM xóa bỏ khoảng cách giữa mô hình lập trình hướng đối tượng C#/VB.NET với hệ quản trị cơ sở dữ liệu SQL Server khi đã mô hình hóa theo hướng đối tượng các bảng trong Database thành các lớp tương ứng khi lập trình.

    Sự ra đời của LINQ to SQL giúp các lập trình viên .NET bớt đi gánh nặng phụ thuộc bên thứ 3 (dùng SQL để truy vấn). LINQ to SQL đồng thời đồng bộ hóa dữ liệu lấy ra và trả về khi truy xuất dữ liệu bằng việc các Data Model nhận dữ liệu trả về được tạo tự động sao cho tương thích với kiểu dữ liệu tương ứng của chúng khi ánh xạ vào cơ sở dữ liệu. Điều này làm tránh tình trạng mất hoặc sai lệch dữ liệu khi truy xuất và thao tác với cơ sở dữ liệu. Trên hết, một công cụ được phát hành cho nền tảng duy nhất là .NET với những anh em trong gia đình .NET sử dụng thì hiệu suất LINQ to SQL hẳn là phải tốt hơn so với những công cụ bên thứ 3.

    LINQ to SQL là gì?

    LINQ to SQL cũng như LINQ là thư viện tích hợp sẵn vào nền tảng .NET từ bản 3.5 trở đi. LINQ to SQL gần như được xem là một công cụ với rất nhiều tính năng, nhưng nổi trội hơn cả là mô hình hóa các dữ liệu từ SQL Server thành dạng hướng đổi tượng và sử dụng cú pháp LINQ để truy xuất và thao thác dữ liệu. Tuy nhiên LINQ to SQL chỉ chạy duy nhất với hệ quản trị cơ sở dữ liệu SQL Server.

    Vì sao sử dụng LINQ to SQL?

    Hỗ trợ công cụ

    Khi sử dụng LINQ to SQL với hệ quản trị cơ sở dữ liệu SQL Server, không phải tạo các lớp Data Model để hứng dữ liệu trả về khi truy vấn dữ liệu vì LINQ to SQL đã tạo sẵn những lớp này với đầy đủ các thuộc tính và kiểu dữ liệu phù hợp với kiểu dữ liệu các cột được qui định trong cơ sở dữ liệu (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).

    linq to sql

    Như hình trên, sau khi lưu trữ file HotelData.dbml, hệ thống sẽ tạo ra các lớp Room, RoomKind, RoomStatus, OrderDetail với đầy đủ các thuộc tính và kiểu dữ liệu tương thích với dữ liệu tương ứng của chúng trong cơ sở dữ liệu.

    Giao diện trực quan và tự động

    LINQ to SQL cung cấp giao diện trực quan về mối quan hệ các bảng dữ liệu sau khi được mô hình hóa. Các lớp DataContext sẽ được tạo ra tự động khi Import file LINQ to SQL vào Project.

    Các lớp DataContext nhận nhiệm vụ mở kết nối đến cơ sở dữ liệu, thực hiện truy vấn hay thay đổi dữ liệu. Các lớp thuộc tính được mô hình hóa từ các bảng dữ liệu trong hệ quản trị cơ sở dữ liệu được truy cập thông qua các lớp DataContext. Lớp DataContext này gần như là một lớp bao (Wrapper Class), những thay đổi nếu có từ các bảng dữ liệu trong cơ sở dữ liệu thì lớp này sẽ cập nhật và thay đổi tương ứng (chúng cũng sẽ cập nhật vào các lớp Data Model được tạo tự động). Điều này khiến cho việc thay đổi thuộc tính dữ liệu trong cơ sở dữ liệu diễn ra dễ dàng và người lập trình không mất quá nhiều công sức để chỉnh sửa lại code.

    mô hình linq to sql
    Mô hình LINQ to SQL

    LINQ nhưng bản chất vẫn là SQL

    Đúng như cái tên LINQ to SQL, các câu truy vấn LINQ sẽ được chuyển sang câu truy vấn SQL trước khi đưa vào SQL Server để truy vấn dữ liệu (LINQ to SQL giống như mang SQL vào C# để viết).
       
    LINQ to SQL là một công cụ tốt đối với những lập trình viên .NET. Cấu trúc, câu lệnh của nó dễ học và quen thuộc (C#/VB.NET). LINQ to SQL rút ngắn thời gian phát triển phần mềm trên nền tảng .NET khi muốn thao tác và truy xuất dữ liệu từ cơ sở dữ liệu, hệ thống tạo và hỗ trợ tất cả những thứ cơ bản như lớp DataContext, các lớp Data Model để hứng dữ liệu, lập trình viên chỉ cần truy xuất và thao tác với dữ liệu.

    Những hạn chế của LINQ to SQL

    Dù là một công cụ khá hay trên nền tảng .NET, LINQ to SQL vẫn có hạn chế như:

    • Chỉ thao tác duy nhất với hệ quản trị cơ sở dữ liệu SQL Server.
    • Chỉ có thể tự động tạo Data Model từ cơ sở dữ liệu chứ không có ngược lại.
    • Chỉ cho phép ánh xạ 1:1 giữa các Table trong Database với các lớp Data Model (tức là không thể tạo 1 Data Model là kết quả kết hợp từ 2 bảng dữ liệu trở lên).

    Sản phẩm

    Đề xuất

    LinQ – Giới Thiệu và Cách Sử Dụng

    LinQ – Giới Thiệu và Cách Sử Dụng

    Giới thiệu LinQ to SQL, hướng dẫn cài đặt và sử dụng LinQ to SQL.

    Bùi Nguyễn Minh Hoàng

    29/08/2015

    Làm Quen với SQL Server

    Làm Quen với SQL Server

    Giới thiệu SQL Server của Microsoft và hướng dẫn thao tác với dữ liệu ...

    Rye Nguyen

    30/07/2015

    Khám phá thêm

    Box2D - Phần 1: Giới Thiệu Và Một Số Thuật Ngữ Và Khái Niệm

    Box2D - Phần 1: Giới Thiệu Và Một Số Thuật Ngữ Và Khái Niệm

    Giới thiệu về engine vật lý sử dụng trong games là Box2D. Giới thiệu ...

    Lập Trình GameCocos2d-x

    23/01/2015

    EmguCV - OpenCV cho .NET - Giới Thiệu và Cách Tích Hợp vào .NET

    EmguCV - OpenCV cho .NET - Giới Thiệu và Cách Tích Hợp vào .NET

    Giới thiệu về wrapper EmguCV của OpenCV và hướng dẫn cách tích hợp ...

    Computer VisionOpenCV

    22/01/2015

    Vuforia & Thực Tại Tăng Cường - Phần 1: Giới Thiệu

    Vuforia & Thực Tại Tăng Cường - Phần 1: Giới Thiệu

    Giới thiệu về Vuforia - nền tảng hỗ trợ xây dựng các ứng dụng thực tại ...

    Technical ArtistVR/AR

    17/04/2016

    Giới Thiệu về Sprite - Sprite Sheet - Sprite Animation

    Giới Thiệu về Sprite - Sprite Sheet - Sprite Animation

    Giới thiệu về Sprite - Sprite Sheet - Sprite Animation, hướng dẫn 1 số ...

    Lập Trình GameKiến Thức Nâng Cao

    05/08/2014

    Giới Thiệu về Arduino Mega 2560

    Giới Thiệu về Arduino Mega 2560

    Bài viết đưa cho các bạn về cái nhìn khái quát về Arduino Mega 2560. ...

    Điện Tử Ứng DụngArduino

    31/08/2017

    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản

    Định Dạng Ảnh Bitmap - Giới Thiệu và Các Thao Tác Cơ Bản

    Trong đời thường, bạn sẽ gặp các file ảnh có định dạng .PNG, .JPG, .TGA, ...

    Phan Tấn Phúc

    13/09/2017

    Chipmunk - Phần 1: Giới Thiệu

    Chipmunk - Phần 1: Giới Thiệu

    Bài viết giới thiệu thư viện xử lý vật lý Chipmunk và giới thiệu các ...

    Lập Trình GameCocos2d-x

    23/01/2015

    Hello MFC - Giới Thiệu và Tạo Project MFC

    Hello MFC - Giới Thiệu và Tạo Project MFC

    Giới thiệu về MFC và tạo project đầu tiên với MFC bằng Visual Studio.

    Modern C++Win32 API

    23/01/2015

    STDIO
    Trang chính
    Công ty TNHH STDIO

    30, Trịnh Đình Thảo, Hòa Thạnh, Tân Phú, Hồ Chí Minh
    +84 28.36205514 - +84 942.111912
    developer@stdio.vn

    383/1 Quang Trung, Phường 10, Quận Gò Vấp, Hồ Chí Minh
    Số giấy phép ĐKKD: 0311563559 do sở Kế hoạch và Đầu Tư TPHCM cấp ngày 23/02/2012

    ©STDIO, 2013 - 2020