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

ASP.NET 使用 LINQ to SQL 類別設計器 (DBML) 實作資料存取 (3)

     編輯:關於ASP.NET

承接前兩篇(LINQ 查詢與儲存程序),本文介紹 Visual Studio 內建的 LINQ to SQL 設計工具(.dbml),以視覺化方式建立實體類別與資料庫對應,取代手寫 Attribute 映射。

建立 DBML 檔案

  1. 方案總管右鍵 → 新增項目 → LINQ to SQL 類別,命名為 Northwind.dbml
  2. 會在 App_Code 產生三個檔案:
    • Northwind.dbml:XML 格式的對應定義
    • Northwind.dbml.layout:設計介面版面資訊
    • Northwind.designer.cs:自動產生的 DataContext 與實體類別

新增 LINQ to SQL 類別

拖曳資料表至設計介面

  1. 開啟 伺服器總管,連接資料庫(本範例使用 Northwind)
  2. 將 Employees 資料表拖曳至 DBML 設計面
  3. 設計工具自動產生 Employee 實體類別與 NorthwindDataContext

拖曳資料表至 DBML

自動產生的核心類別

// NorthwindDataContext 繼承 DataContext
public partial class NorthwindDataContext : System.Data.Linq.DataContext {
    public System.Data.Linq.Table<Employee> Employees;
    // ... 其他 Table 屬性
    
    public NorthwindDataContext() : base(global::System.Configuration.ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString) { }
}

// 實體類別對應 Employees 資料表
[Table(Name="dbo.Employees")]
public partial class Employee : INotifyPropertyChanging, INotifyPropertyChanged {
    [Column(Storage="_EmployeeID", DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
    public int EmployeeID { get; set; }
    
    [Column(Storage="_FirstName", DbType="NVarChar(20)")]
    public string FirstName { get; set; }
    
    [Column(Storage="_LastName", DbType="NVarChar(20)")]
    public string LastName { get; set; }
    // ... 其他欄位
}

在專案中使用 DataContext

// 查詢範例
using (var db = new NorthwindDataContext()) {
    var emps = from e in db.Employees
               where e.City == "London"
               select new { e.EmployeeID, e.FirstName, e.LastName };
    
    GridView1.DataSource = emps;
    GridView1.DataBind();
}

// 新增範例
using (var db = new NorthwindDataContext()) {
    var emp = new Employee {
        FirstName = "John",
        LastName = "Doe",
        Title = "Sales Representative",
        HireDate = DateTime.Now
    };
    db.Employees.InsertOnSubmit(emp);
    db.SubmitChanges(); // 實際寫入資料庫
}

DBML 進階功能

  • 關聯屬性:拖曳有 FK 關聯的資料表時,自動建立 EntitySet / EntityRef 導覽屬性
  • 儲存程序對應:將 Stored Procedure 拖至設計面右側方法窗格,自動產生對應方法
  • 部分類別擴充:建立 Employee.partial.cs 加入驗證邏輯或計算屬性,不影響重新產生
  • 外部對應檔:進階案例可將映射移至外部 XML,不重新編譯即可調整對應

常見問題

問題解決
資料庫結構變更後實體不同步重新拖曳資料表,或右鍵設計面 → 「重新整理」
連接字串部署時需修改建構函式預設讀取 web.config,直接修改 connectionStrings 區段即可
效能:大量資料載入慢使用 DataLoadOptions 指定 LoadWith 減少 N+1 查詢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved