首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

LINQ to SQL 入門實戰:Step by Step 完整教學

     編輯:關於.NET

前言:為什麼選 LINQ to SQL?

面對 NHibernate、NBear、Castle 等第三方 ORM,LINQ to SQL (隨 .NET 3.5/VS2008 內建) 擁有三大優勢:

  1. 原生整合:零第三方 DLL,部署零負擔,VS2008 設計工具全力支援。
  2. 零代碼/零配置:純拖曳即可完成 ORM 映射,上手極快。
  3. 功能足夠日常需求:中小型專案完全滿足,學習曲線平緩。Entity Framework 雖強大但較重量級。

澄清迷思:LINQ ≠ LINQ to SQL。LINQ 是語言層面的查詢語法 (Data Iterative Engine);LINQ to SQL 是其在資料庫存取上的應用框架。微軟雖主推 EF,但 LINQ to SQL 會長期保留於 .NET Framework 相容性中。

Step 1:建立資料庫

SQL Server Express 2005,建立 MyBulletin 資料庫,兩張表:

  • Category (公告分類)
  • Bulletin (公告內容)

一對多關聯:一個分類對多條公告。

資料表結構

Step 2:新增 LINQ to SQL Classes 檔案

VS2008 → Class Library 專案 LinqToSqlDemo.Orm → 右鍵 Add → New Item → LINQ to SQL Classes → 命名 DataClasses.dbml。

新增 DBML

Step 3:從資料庫自動生成實體類別

  1. 開啟 Server Explorer → Add Connection → 連線 MyBulletin。
  2. 展開 Tables,選取 Category、Bulletin 拖曳至 DBML 設計面。
  3. Ctrl+S 儲存,ORM 完成!

加入連線

設計視圖

生成檔案:DataClasses.designer.cs (實體類別 + DataContext)、app.config (連線字串)。

Step 4:使用 LINQ to SQL 操作資料庫

新增 Console 專案 LinqToSqlDemo.Test,參考 LinqToSqlDemo.Orm 與 System.Data.Linq。

核心代碼

using System;
using System.Linq;
using LinqToSqlDemo.Orm;

namespace LinqToSqlDemo.Test
{
    class Program
    {
        private static DataClassesDataContext db = new DataClassesDataContext();

        static void Main()
        {
            Console.WriteLine("=== LINQ to SQL 測試 ===\n");

            // Insert
            Console.WriteLine("=== 測試 Insert ===");
            TestInsert(); Output();

            // Delete
            Console.WriteLine("=== 測試 Delete ===");
            TestDelete(); Output();

            // Update
            Console.WriteLine("=== 測試 Update ===");
            TestUpdate(); Output();

            Console.ReadLine();
        }

        private static void Output()
        {
            foreach (var c in db.Categories)
                Console.WriteLine($"分類 {c.ID}:{c.Name}");

            var sport = db.Categories.Single(c => c.Name == "體育新聞");
            foreach (var b in sport.Bulletins)
            {
                Console.WriteLine($"標題:{b.Title}");
                Console.WriteLine($"內容:{b.Content}");
                Console.WriteLine($"日期:{b.Date}");
                Console.WriteLine($"分類:{b.Category1.Name}");
            }
        }

        private static void TestInsert()
        {
            var cat1 = new Category { Name = "國際要聞" };
            var cat2 = new Category { Name = "體育新聞" };
            var cat3 = new Category { Name = "財經快報" };

            var bull1 = new Bulletin { Title = "曼聯晉級冠軍杯四強", Content = "曼聯晉級冠軍杯四強", Date = DateTime.Now };
            var bull2 = new Bulletin { Title = "18:00直播亞冠首爾VS山東", Content = "18:00直播亞冠首爾VS山東,敬請期待!!!", Date = DateTime.Now };

            cat2.Bulletins.Add(bull1);
            cat2.Bulletins.Add(bull2);

            db.Categories.InsertOnSubmit(cat1);
            db.Categories.InsertOnSubmit(cat2);
            db.Categories.InsertOnSubmit(cat3);
            db.SubmitChanges(); // Unit of Work 模式:統一提交
        }

        private static void TestDelete()
        {
            db.Categories.DeleteOnSubmit(db.Categories.Single(c => c.Name == "國際要聞"));
            db.SubmitChanges();
        }

        private static void TestUpdate()
        {
            var finance = db.Categories.Single(c => c.Name == "財經快報");
            finance.Name = "財經新聞";
            db.SubmitChanges();
        }
    }
}

執行結果

執行輸出

核心操作解析

操作模式關鍵方法
取得 DataContextGatewaynew DataClassesDataContext()
查詢單筆Lambdadb.Categories.Single(c => c.ID == 3)
查詢全部集合屬性db.Categories
條件查詢+排序LINQ 查詢語法from b in db.Bulletins where b.Category==3 orderby b.ID descending select b
分頁Skip/Takequery.Skip(pageSize*(pageNo-1)).Take(pageSize).ToList()
新增Unit of WorkInsertOnSubmit(entity); SubmitChanges()
刪除Unit of WorkDeleteOnSubmit(entity); SubmitChanges()
修改追蹤變更entity.Property = val; SubmitChanges()

關聯導航

DBML 自動映射一對多:Category.Bulletins (集合) ↔ Bulletin.Category1 (單一反向參考,名稱衝突自動加尾碼 1)。

總結

四步驟完成 ORM 建置與 CRUD 操作。LINQ to SQL 以輕量、直覺、高生產力著稱,中小專案首選。進階功能 (預載入、優化 SQL、預存程序映射等) 請參考 MSDN 文檔。

原文出處:leoo2sk.cnblogs.com

完整代碼下載:LinqToSqlDemo.rar

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved