物件關聯式設計工具 (O/R 設計工具) 提供視覺化設計介面,用以建立和編輯以資料庫物件為基礎的 LINQ to SQL 類別 (實體類別)。 透過 LINQ to SQL [LINQ to SQL],您可以使用 LINQ 技術來存取 SQL 資料庫。 如需詳細資訊,請參閱LINQ (Language-Integrated Query)。
執行更新的邏輯預設是由 LINQ to SQL 執行階段提供。 執行階段會根據資料表的結構描述 (資料行定義和主索引鍵資訊),建立預設的 Insert、Update 和 Delete 陳述式。 如果不想要使用預設行為,則可以設定更新行為,並指定用特定的預存程序 (Stored Procedure) 來執行處理資料庫資料時所需的插入、更新和刪除作業。 未產生預設行為時 (例如,實體類別是對應至檢視時),同樣可以這樣做。 此外,在資料庫需要透過預存程序進行資料表存取時,也可以覆寫預設更新行為。 如需詳細資訊,請參閱使用預存程序自訂作業。
注意事項 |
---|
這個逐步解說需要使用 Northwind 資料庫中的 InsertCustomer、UpdateCustomer 和 DeleteCustomer 預存程序。如需如何建立這些預存程序的詳細資訊,請參閱逐步解說:建立 Northwind Customers 資料表的更新預存程序。 |
這個逐步解說提供覆寫預設 LINQ to SQL 執行階段行為,以使用預存程序將資料儲存回資料庫的必要步驟。
在此逐步解說中,您會學到如何執行下列工作:
建立新的 Windows Form 應用程式,並在其中加入 LINQ to SQL 檔案。
建立對應至 Northwind Customers 資料表的實體類別。
建立參考 LINQ to SQL Customer 類別的物件資料來源。
建立 Windows Form,這個 Windows Form 包含繫結至 Customer 類別的 DataGridView。
實作表單的儲存功能。
將預存程序加入至 O/R 設計工具以建立 DataContext 方法。
設定 Customer 類別,以使用預存程序來執行插入、更新和刪除作業。
必要條件
若要完成這個逐步解說,您需要下列項目:
SQL Server 版本的 Northwind 範例資料庫的存取權。 如需詳細資訊,請參閱如何:安裝範例資料庫。
Northwind 資料庫的 InsertCustomer、UpdateCustomer 和 DeleteCustomer 預存程序。 如需詳細資訊,請參閱逐步解說:建立 Northwind Customers 資料表的更新預存程序。
建立應用程式和加入 LINQ to SQL 類別
因為您會使用 LINQ to SQL 類別並將資料顯示在 Windows Form 上,所以請建立新的 Windows Form 應用程式並加入 LINQ to SQL 類別檔案。
注意事項 |
---|
您的電腦對於下列指示中某些 Visual Studio 使用者介面項目的名稱或位置,可能會顯示不同的資訊:您所擁有的 Visual Studio 版本以及使用的設定會決定這些項目。如需詳細資訊,請參閱<Visual Studio 中的自訂開發設定>。 |
若要建立內含 LINQ to SQL 類別的新 Windows 應用程式專案
從 [檔案] 功能表中,建立新專案。
將專案命名為 UpdatingwithSProcsWalkthrough。
注意事項 Visual Basic 和 C# 專案都支援 O/R 設計工具。因此請以其中一種語言建立新專案。
按一下 [Windows Form 應用程式] 範本,然後按一下 [確定]。 如需詳細資訊,請參閱使用 .NET Framework 開發用戶端應用程式。
UpdatingwithSProcsWalkthrough 專案已建立並加入至 [方案總管] 中。
在 [專案] 功能表中,按一下 [加入新項目]。
按一下 [LINQ to SQL 類別] 範本,並在 [名稱] 方塊中輸入 Northwind.dbml。
按一下 [加入]。
專案中隨即加入空的 LINQ to SQL 類別檔案 (Northwind.dbml),並開啟 O/R 設計工具。
建立 Customer 實體類別和物件資料來源
將資料表從 [伺服器總管]/[資料庫總管] 拖曳至 O/R 設計工具,就可以建立對應至資料庫資料表的 LINQ to SQL 類別。 結果會產生對應至資料庫中各資料表的 LINQ to SQL 實體類別。 建立實體類別之後,實體類別就和其他具有公用 (Public) 屬性的類別一樣,可以當成物件資料來源使用。
若要建立 Customer 實體類別和將它設為資料來源
在 [伺服器總管]/[資料庫總管] 中,於 SQL Server 版的 Northwind 範例資料庫中尋找 Customer 資料表。 如需詳細資訊,請參閱如何:連接到 Northwind 資料庫。
將 [Customers] 節點從 [伺服器總管]/[資料庫總管] 拖曳至 O/R 設計工具介面。
建立一個名稱為 Customer 的實體類別。 它的屬性會對應至 Customers 資料表中的各資料行。 因為這個實體類別代表 Customers 資料表中的單一客戶,所以它的名稱是 Customer,而不是 Customers。
注意事項 這個重新命名的行為稱為「複數表示」(Pluralization)。您可以在選項對話方塊 (Visual Studio) 中開啟或關閉這個行為。如需詳細資訊,請參閱HOW TO:開啟和關閉複數表示 (O/R 設計工具)。
按一下 [建置] 功能表上的 [建置 UpdatingwithSProcsWalkthrough] 進行專案建置。
按一下 [資料] 功能表上的 [顯示資料來源]。
在 [資料來源] 視窗中,按一下 [加入新資料來源]。
按一下 [選擇資料來源類型] 頁面上的 [物件],然後按 [下一步]。
展開 [UpdatingwithSProcsWalkthrough] 節點,然後尋找並選取 [Customer] 類別。
注意事項 如果 Customer 類別無法使用,請取消精靈、建置專案,然後再次執行精靈。
按一下 [完成] 以建立資料來源,然後將 [Customer] 實體類別加入至 [資料來源] 視窗。
建立 DataGridView 以便在 Windows Form 上顯示 Customer 資料
將 LINQ to SQL 資料來源項目從 [資料來源] 視窗拖曳至 Windows Form,就可以建立繫結至實體類別的控制項。
若要加入繫結至實體類別的控制項
在 [設計] 檢視表中開啟 [Form1]。
從 [資料來源] 視窗將 [Customer] 節點拖曳至 Form1。
注意事項 若要顯示 [資料來源] 視窗,請按一下 [資料] 功能表上的 [顯示資料來源]。
在 [程式碼編輯器] 中開啟 Form1。
將下列程式碼加入至表單的全域範圍中,意即不要指定特定的方法,但要屬於 Form1 類別的一部分:
Private NorthwindDataContext1 As New NorthwindDataContext
private NorthwindDataContext northwindDataContext1 = new NorthwindDataContext();
建立 Form_Load 事件的事件處理常式,並將下列程式碼加入至處理常式中:
CustomerBindingSource.DataSource = NorthwindDataContext1.Customers
customerBindingSource.DataSource = northwindDataContext1.Customers;
實作儲存功能
預設不會啟用儲存按鈕,也不會實作儲存功能。 同時,為物件資料來源建立資料繫結控制項時,並不會自動加入程式碼以將變更的資料儲存至資料庫。 本節說明如何啟用儲存按鈕並實作 LINQ to SQL 物件的儲存功能。
若要實作儲存功能
在 [設計] 檢視表中開啟 [Form1]。
選取 [CustomerBindingNavigator] 上的儲存按鈕 (圖示為磁碟片的按鈕)。
在 [屬性] 視窗中,將 [Enabled] 屬性設定為 [True]。
按兩下儲存按鈕以建立事件處理常式,並切換至 [色彩編輯器]。
將下列程式碼加入至儲存按鈕事件處理常式:
NorthwindDataContext1.SubmitChanges()
northwindDataContext1.SubmitChanges();
覆寫執行更新 (插入、更新和刪除) 的預設行為
若要覆寫預設更新行為
在 O/R 設計工具中開啟 LINQ to SQL 檔案 (按兩下 [方案總管] 中的 [Northwind.dbml] 檔案)。
在 [伺服器總管]/[資料庫總管] 中展開 Northwind 資料庫的 [預存程序] 節點,找到 [InsertCustomers]、[UpdateCustomers] 和 [DeleteCustomers] 預存程序。
將這三個預存程序都拖曳至 O/R 設計工具。
預存程序會加入至方法窗格中做為 DataContext 方法。 如需詳細資訊,請參閱DataContext 方法 (O/R 設計工具)。
選取 O/R 設計工具中的 [Customer] 實體類別。
選取 [屬性] 視窗中的 [Insert] 屬性。
按一下 [使用執行階段] 旁邊的省略符號 (...),以開啟 [設定行為] 對話方塊。
選取 [自訂]。
選取 [自訂] 清單中的 [InsertCustomers] 方法。
按一下 [套用] 儲存所選取類別和行為的設定。
注意事項 完成每一項變更後按一下 [套用],即可繼續設定每個類別/行為組合的行為。如果您在按一下 [套用] 之前變更了類別或行為,則會出現警告對話方塊,讓您可以套用任何變更。
選取 [行為] 清單中的 [更新]。
選取 [自訂]。
選取 [自訂] 清單中的 [UpdateCustomers] 方法。
檢查 [方法引數] 和 [類別屬性] 清單會發現資料表的某些資料行會有兩個 [方法引數] 和兩個 [類別屬性]。 這樣可以更容易追蹤變更,並建立陳述式來檢查並行違規。
將 [Original_CustomerID] 方法引數對應至 [CustomerID (Original)] 類別屬性。
注意事項 根據預設,方法引數會對應至同名的類別屬性。如果屬性名稱變更,使得資料表與實體類別之間不再對應,則您可能需要選取當 O/R 設計工具無法判斷正確的對應時,所要對應的對等類別屬性。此外,如果方法引數沒有可對應的有效類別屬性,可以將 [類別屬性] 值設定為 [(無)]。
按一下 [套用] 儲存所選取類別和行為的設定。
選取 [行為] 清單中的 [刪除]。
選取 [自訂]。
選取 [自訂] 清單中的 [DeleteCustomers] 方法。
將 [Original_CustomerID] 方法引數對應至 [CustomerID (Original)] 類別屬性。
按一下 [確定]。
注意事項 |
---|
雖然這在本特定逐步解說中不會構成問題,仍不建議 LINQ to SQL 在插入和更新期間,針對識別 (自動遞增)、rowguidcol (資料庫產生的 GUID) 和時間戳記資料行自動處理資料庫產生的值。其他資料行型別的資料庫產生值將非預期地產生 null 值。若要傳回資料庫產生的值,您應該手動將 IsDbGenerated 設定為 true,並將 AutoSync 設定為下列其中一項:Always、OnInsert 或 OnUpdate。 |
測試應用程式
再次執行應用程式,確認 UpdateCustomers 預存程序已正確更新資料庫中的客戶記錄。
若要測試應用程式
按 F5。
修改方格內的記錄,以測試「更新」行為。
加入新的記錄,以測試「插入」行為。
按一下儲存按鈕,將變更儲存回資料庫。
關閉表單
按 F5,確認更新的記錄和剛插入的記錄確實存在。
刪除您在步驟 3 建立的新記錄,以測試「刪除」行為。
按一下儲存按鈕送出變更並從資料庫中移除刪除的記錄
關閉表單
按 F5 並確認已從資料庫中移除刪除的記錄。
注意事項 如果應用程式使用 SQL Server Express Edition,則根據資料庫檔案 [複製到輸出目錄] 屬性值的不同,在步驟 10 按 F5 時,變更可能不會出現。如需詳細資訊,請參閱如何:管理專案中的本機資料檔。
後續步驟
根據應用程式需求的不同,在建立 LINQ to SQL 實體類別之後,您可能會想執行幾個步驟。 您可以進行下列作業讓此應用程式發揮更強的功能:
在更新期間實作並行檢查。 如需詳細資訊,請參閱 開放式並行存取概觀。
加入 LINQ 查詢,以篩選資料。 如需詳細資訊,請參閱 LINQ 查詢簡介 (C#)。
請參閱
工作
HOW TO:指派預存程序來執行更新、插入和刪除 (O/R 設計工具)