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

走進 LINQ:LINQ to SQL How Do I (1) — 入門實戰

     編輯:關於.NET

難度 50,定位入門級。以部落格系統為例,核心實體:User、Blog、Post。一個用戶擁有一個部落格,一部落格可有零或多篇文章。

Step 1:建立實體物件

public class User {
    public int Id { get; set; }
    public Blog Blog { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; }
    public string NickName { get; set; }
    public DateTime LeaveTime { get; set; }
}

public class Blog {
    public int Id { get; set; }
    public int UserId { get; set; }
    public string Name { get; set; }
    public DateTime CreateDate { get; set; }
    public IList<Post> Posts { get; set; }
}

public class Post {
    public int Id { get; set; }
    public int BlogId { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }
    public DateTime CreateDate { get; set; }
}

Step 2:建立資料庫資料表

Users、Blogs、Posts 三張表(表名用複數遵循 Rails/ActiveRecord 慣例)。User 的 LeaveTime 不持久化,僅供線上統計暫存。

Step 3:建立對應

以 Post 為例:

[Table(Name="posts")]
public class Post {
    [Column(Name="postid", IsPrimaryKey=true, IsDbGenerated=true)] public int Id { get; set; }
    [Column] public int BlogId { get; set; }
    [Column] public string Title { get; set; }
    [Column] public string Body { get; set; }
    [Column] public DateTime CreateDate { get; set; }
}

Step 4:執行查詢

DataContext 為入口點,負責查詢轉譯、執行、連線管理。建立實例:

DataContext dbContext = new DataContext(ConfigurationManager.ConnectionStrings["CnBlogs"].ConnectionString);
dbContext.Log = Console.Out; // 顯示產生的 SQL
Table<Post> posts = dbContext.GetTable<Post>();

完整查詢:

foreach(var post in posts) Console.WriteLine(post.Title);

產生標準 SQL(如圖)。

條件篩選

var posts = from post in dbContext.GetTable<Post>()
            where post.BlogId == 2
            select post;

產生參數化 SQL,防止 SQL Injection 並利用快取。

支援 C# 方法轉譯,如 StartsWith 轉為 LIKE:

var posts = from post in dbContext.GetTable<Post>()
            where post.Title.StartsWith("y")
            select post;

注意:非所有 C# 方法皆可轉譯(如 ToString("yyyy-MM-dd") 會失敗)。

Step 5:插入資料

Table<Post> posts = dbContext.GetTable<Post>();
Post post = new Post { BlogId=2, Title="test", Body="test...", CreateDate=DateTime.Now };
posts.InsertOnSubmit(post);
dbContext.SubmitChanges(); // 真正執行
Console.WriteLine(post.Id); // 取得自增 ID

產生 INSERT + SELECT SCOPE_IDENTITY()。
須將 Id 設為 IsDbGenerated=true,否則 .NET 預設值 0 會導致錯誤。

Step 6:更新與刪除

更新:查詢 → 修改屬性 → SubmitChanges() 自動產生 UPDATE。
刪除:呼叫 DeleteOnSubmit → SubmitChanges()。

後記

本篇完整介紹單表 CRUD 基礎操作。下一篇將深入多表聯結、關聯對應與延遲執行機制。

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