備註
類別 DataSet 和相關類別是 2000 年代初的舊版 .NET Framework 技術,可讓應用程式在應用程式與資料庫中斷連線時使用記憶體中的數據。 這些技術特別適用於可讓使用者修改數據並將變更保存回資料庫的應用程式。 雖然數據集是經過證實的成功技術,但新 .NET 應用程式的建議方法是使用 Entity Framework Core。 Entity Framework 提供更自然的方式,以表格式數據作為物件模型使用,而且具有更簡單的程序設計介面。
Visual Studio 中的 LINQ to SQL 工具提供可視化設計介面,以建立和編輯以資料庫中對象為基礎的 LINQ to SQL 類別(實體類別)。 藉由使用 LINQ to SQL,您可以使用 LINQ 技術來存取 SQL 資料庫。 如需詳細資訊,請參閱 LINQ(語言整合式查詢)。
根據預設,執行更新的邏輯是由 LINQ to SQL 執行時間提供。 運行時間會根據數據表的架構建立預設 Insert、 Update和 Delete 語句(數據行定義和主鍵資訊)。 當您不想使用預設行為時,您可以設定更新行為,並指定特定預存程式來執行資料庫內數據所需的必要插入、更新和刪除。 您也可以在未產生預設行為時執行此動作,例如,當您的實體類別對應至檢視時。 此外,當資料庫需要透過預存程式存取資料表時,您可以覆寫預設更新行為。 如需詳細資訊,請參閱 使用預存程式自定義作業。
備註
本逐步解說需要 Northwind 資料庫的 InsertCustomer、 UpdateCustomer 和 DeleteCustomer 預存程式的可用性。
本逐步解說提供您必須遵循的步驟,來覆寫預設的 LINQ to SQL 執行階段行為,藉由使用預存程式將資料儲存回資料庫。
在本逐步解說中,您將瞭解如何執行下列工作:
建立新的 Windows Forms 應用程式,並將 LINQ to SQL 檔案新增至其中。
建立對應至 Northwind
Customers數據表的實體類別。建立參考LINQ to SQL
Customer類別的對象數據源。建立一個 Windows Form,其中包含系結至 DataGridView 類別的
Customer。實作表單的儲存功能。
將預存程式新增至 DataContext,以建立方法。
將類別設定
Customer為使用預存程式來執行插入、更新和刪除。
先決條件
本逐步解說使用 SQL Server Express LocalDB 和 Northwind 範例資料庫。
如果您沒有 SQL Server Express LocalDB,請從 SQL Server Express 下載頁面或透過 Visual Studio 安裝程式進行安裝。 在 Visual Studio Installer中,您可以將 SQL Server Express LocalDB 安裝為 資料儲存和處理 工作負載的一部分,或安裝為個別元件。
依照下列步驟安裝 Northwind 範例資料庫:
在 Visual Studio 中,開啟 [SQL Server 物件總管] 視窗。 (SQL Server 物件資源管理器會作為資料儲存和處理工作負載的一部分安裝在Visual Studio 安裝程式中。)展開SQL Server節點。 以滑鼠右鍵點擊您的 LocalDB 實例,然後選取 新增查詢。
查詢編輯器視窗隨即開啟。
將 Northwind Transact-SQL 腳本 複製到剪貼簿。 此 T-SQL 腳本會從頭開始建立 Northwind 資料庫,並填入數據。
將 T-SQL 文稿貼到查詢編輯器中,然後選擇 [執行] 按鈕。
在短時間內,查詢會完成執行,並建立 Northwind 資料庫。
建立應用程式和新增 LINQ to SQL 類別
因為您正在使用 LINQ to SQL 類別,並在 Windows Form 上顯示數據,請建立新的 Windows Forms 應用程式,並將 LINQ 新增至 SQL 類別檔案。
備註
本文中的指示說明 Visual Studio 中可用的互動式開發體驗 (IDE) 最新版本。 您的電腦可能會顯示某些使用者介面元素的不同名稱或位置。 您可能使用不同的 Visual Studio 版本或不同的環境設定。 如需詳細資訊,請參閱 個人化 IDE。
建立包含LINQ to SQL 類別的新 Windows Forms 應用程式專案
在 Visual Studio 的 [ 檔案 ] 功能表上,選取 [ 新增>專案]。
展開左側窗格中的 Visual C# 或 Visual Basic ,然後選取 [Windows 桌面]。
在中間窗格中,選取 [Windows Forms 應用程式 ] 項目類型。
將專案命名為 UpdateingWithSProcsWalkthrough,然後選擇 [ 確定]。
UpdatingWithSProcsWalkthrough 專案隨即建立,並新增至 方案總管。
在 [專案] 功能表上,按一下 [新增項目]。
按兩下 [LINQ to SQL 類別] 樣本,然後在 [名稱] 方塊中輸入 Northwind.dbml。
按下 新增。
空的 LINQ to SQL 類別檔案 (Northwind.dbml) 會新增至專案,且 O/R 設計工具 隨即開啟。
建立 Customer 實體類別和對象數據源
將伺服器總管或資料庫總管中的資料表拖曳到O/R 設計師,以建立對應至資料庫資料表的 LINQ to SQL 類別。 結果是 LINQ to SQL 實體類別對應至資料庫中的資料表。 建立實體類別之後,它們就可以當做對象數據源使用,就像具有公用屬性的其他類別一樣。
若要建立 Customer 實體類別,並使用它設定資料來源
在 [伺服器總 管] 或 [資料庫總管] 中,找出 Northwind 範例資料庫中 SQL Server 版本的 Customer 數據表。
將 [客戶 ] 節點從 [伺服器 總管] 或 [資料庫 總管] 拖曳至 *O/R 設計工具 介面。
建立名為 Customer 的實體類別。 它有對應至「顧客」資料表中欄位的屬性。 實體類別的名稱為 Customer (not Customers),因為它代表 Customers 數據表中的單一客戶。
備註
此重新命名行為稱為 複數化。 它可以在 [ 選項] 對話框中開啟或關閉。 如需詳細資訊,請參閱如何:開啟和關閉複數 (O/R 設計工具)。
在 [建置] 功能表上,按一下 [建置 UpdatingwithSProcsWalkthrough] 以建置專案。
若要開啟 [數據源 ] 視窗,請在 [ 數據 ] 功能表上,按兩下 [ 顯示數據源]。
在 [數據源] 視窗中,按一下 [新增資料源]。
按兩下 [選擇資料源類型] 頁面上的 [物件],然後選取 [下一步]。
展開 UpdatingwithSProcsWalkthrough 節點,然後找出並選取 Customer 類別。
備註
如果 Customer 類別無法使用,請取消精靈、建置項目,然後再次執行精靈。
按兩下 [完成 ] 以建立資料源,並將 Customer 實體類別新增至 [資料源] 視窗。
建立 DataGridView 以在 Windows Form 上顯示客戶數據
將 LINQ to SQL 資料來源項目從 資料來源 視窗拖曳至 Windows Form,以建立系結至實體類別的控制項。
新增系結至實體類別的控件
在設計檢視中開啟 [Form1]。
從 [ 數據源] 視窗,將 [客戶 ] 節點拖曳到 Form1。
備註
若要顯示 [數據源] 視窗,請單擊 [資料] 選單上的 [顯示數據源]。
在程式代碼編輯器中開啟 Form1 。
將下列程式代碼新增至窗體、全域至表單、位於任何特定方法之外,但在類別內
Form1:建立
Form_Load事件的事件處理程式,並將下列程式碼新增至處理程式:
實作儲存功能
默認不會啟用 [儲存] 按鈕,而且不會實作儲存功能。 此外,建立對象數據源的數據綁定控件時,不會自動新增程序代碼,以將變更的數據儲存至資料庫。 本節說明如何啟用儲存按鈕,並實作 LINQ to SQL 物件的儲存功能。
實作儲存功能
在設計檢視中開啟 [Form1]。
選取 CustomerBindingNavigator 上的儲存按鈕(具有軟盤圖示的按鈕)。
在 [ 屬性] 視窗中,將 Enabled 屬性設定為 True。
按兩下 [儲存] 按鈕以建立事件處理程式,並切換至程式代碼編輯器。
將下列程式代碼新增至儲存按鈕事件處理程式:
覆寫執行更新的預設行為(插入、更新和刪除)
覆寫預設更新行為
在 O/R 設計工具中開啟 LINQ to SQL 檔案。 (按兩下[方案總管] 中的 Northwind.dbml 檔案。
在 [伺服器總管] 或 [資料庫總管] 中,展開 Northwind 資料庫預存程序節點,然後找出 InsertCustomers、UpdateCustomers 和 DeleteCustomers 預存程式。
將所有三個預存程式拖曳到 O/R 設計工具上。
預存程序會作為 DataContext 方法新增至方法窗格。 如需詳細資訊,請參閱 DataContext 方法 (O/R 設計工具)。
在 O/R 設計工具中選取 [客戶] 實體類別。
在 [ 屬性] 視窗中,選取 [插入 ] 屬性。
按兩下 [使用運行時間] 旁的省略號 (...) 以開啟 [設定行為] 對話框。
選取自訂。
在 [自定義] 列表中選取 InsertCustomers 方法。
按一下套用以儲存所選類別和行為的組態。
備註
只要您在進行每個變更之後,只要按兩下 [ 套用 ] 即可繼續設定每個類別/行為組合的行為。 如果您在按兩下 [ 套用] 之前變更類別或行為,則會出現警告對話框,讓您有機會套用任何變更。
在 [行為] 列表中選取 [更新]。
選取自訂。
在 [自定義] 列表中選取 UpdateCustomers 方法。
檢查 方法自變數 和 類別屬性 的清單,並注意數據表中某些數據行有兩個 Method Arguments 和兩個 Class Properties 。 這可讓您更輕鬆地追蹤變更,並建立檢查並行違規的語句。
將 Original_CustomerID 方法自變數對應至 CustomerID (Original) 類別屬性。
備註
根據預設,方法自變數會在名稱相符時對應至類別屬性。 如果屬性名稱已變更,且數據表與實體類別之間不再相符,則如果 O/R 設計工具 無法判斷正確的對應,您可能必須選取對應的對等類別屬性。 此外,如果方法自變數沒有對應的有效類別屬性,您可以將 [類別屬性] 值設定為 [無]。
按一下套用以儲存所選類別和行為的組態。
在 [行為] 列表中選取 [刪除]。
選取自訂。
在 [自定義] 列表中選取 DeleteCustomers 方法。
將 Original_CustomerID 方法自變數對應至 CustomerID (Original) 類別屬性。
按一下 [確定]。
備註
雖然這不是這個特定逐步解說的問題,但值得注意的是,LINQ to SQL 在插入和更新期間會自動處理資料庫產生的值,例如,識別欄位(自動遞增)、rowguidcol(資料庫產生的全域唯一標識符 (GUID))和時間戳欄位。 其他欄位類型中資料庫產生的值會預料之外地造成 Null 值。 若要傳回資料庫產生的值,您應該手動將 設定 IsDbGenerated 為 true 和 AutoSync 下列其中一項: AutoSync.Always、 AutoSync.OnInsert 或 AutoSync.OnUpdate。
測試應用程式
再次執行應用程式,確認 UpdateCustomers 預存程式已正確更新資料庫中的客戶記錄。
請按 F5。
修改方格中的記錄,以測試更新行為。
新增記錄以測試插入行為。
按兩下 [儲存] 按鈕,將變更儲存回資料庫。
關閉表單。
按 F5 並確認更新的記錄和新插入的記錄已保存。
刪除您在步驟 3 中建立的新記錄,以測試刪除行為。
按兩下 [儲存] 按鈕以提交變更,並從資料庫移除已刪除的記錄。
關閉表單。
按 F5 ,並確認已刪除的記錄已從資料庫移除。
備註
如果您的應用程式使用 SQL Server Express Edition,視資料庫檔案的 [複製到輸出目錄 ] 屬性的值而定,當您在步驟 10 中按 F5 時,可能不會顯示變更。
後續步驟
根據您的應用程式需求,在建立LINQ to SQL 實體類別之後,您可能會想要執行幾個步驟。 您可以對此應用程式進行一些增強功能,包括:
在更新期間實作並行檢查。 如需詳細資訊,請參閱 樂觀並發控制:概觀。
新增 LINQ 查詢以篩選數據。 如需詳細資訊,請參閱 LINQ 查詢簡介 (C#)。