Share via


指派用來執行更新、插入和刪除的預存程序 (O/R 設計工具)

預存程序可以新增至 O/R 設計工具,而且可以作為一般 DataContext 方法來執行。 預存程序也可以用來覆寫當儲存實體類別的變更至資料庫時,用於執行插入、更新和刪除作業的預設 LINQ to SQL 執行階段行為 (例如,在呼叫 SubmitChanges 方法時)。

注意

如果預存程序傳回的值需要送回給用戶端 (例如,在預存程序中計算的值),請在預存程序中建立輸出參數。 如果您無法使用輸出參數,請撰寫部分方法實作 (Implementation),而不要依賴 O/R 設計工具產生的覆寫作業。 與資料庫產生的值對應的成員,必須在 INSERTUPDATE 作業成功完成之後設定為適當值。 如需詳細資訊,請參閱開發人員覆寫預設行為的責任

注意

LINQ to SQL 會自動針對身分識別 (自動遞增)、rowguidcol (資料庫產生的全域唯一識別碼 GUID) 和時間戳記資料行,處理資料庫產生的值。 其他資料行型別的資料庫產生值將非預期地產生 null 值。 若要傳回資料庫產生的值,您應該手動將 IsDbGenerated 設定為 true,並將 AutoSync 設定為下列其中一項:AutoSync.AlwaysAutoSync.OnInsertAutoSync.OnUpdate

設定實體類別的更新行為

利用 LINQ to SQL 實體類別中的資料變更來更新資料庫 (插入、更新和刪除) 的邏輯,預設是由 LINQ to SQL 執行階段所提供。 執行階段會根據資料表的結構描述 (資料行和主索引鍵資訊),建立預設的 INSERTUPDATEDELETE 命令。 如果不想要預設行為,您可指派特定的預存程序來操作資料庫資料所需的插入、更新和刪除作業,以設定更新行為。 未產生預設行為時 (例如,實體類別是對應至檢視時),同樣可以這樣做。 最後,在資料庫需要透過預存程序進行資料表存取時,也可以覆寫預設更新行為。

注意

在本文的某些 Visual Studio 使用者介面項目中,您的電腦可能會顯示不同的名稱或位置。 您使用的可能是不同版本的 Visual Studio 或不同的環境設定。 如需詳細資訊,請參閱將 IDE 個人化

若要指派預存程序以覆寫實體類別的預設行為

  1. 在設計工具中開啟 LINQ to SQL 檔案。 (在方案總管中,按兩下 .dbml 檔案。)

  2. 展開 [伺服器總管] 或 [資料庫總管] 中的 [預存程序],尋找您希望當成實體類別之 Insert、Update 和 (或) Delete 命令使用的預存程序。

  3. 將預存程序拖曳至 O/R 設計工具

    預存程序會加入至方法窗格做為 DataContext 方法。 如需詳細資訊,請參閱 DataContext 方法 (O/R 設計工具)

  4. 選取想要使用預存程序執行更新的實體類別。

  5. 在 [屬性] 視窗中,選取要覆寫的命令 (InsertUpdateDelete)。

  6. 按一下 [使用執行階段] 字組旁邊的省略符號 (...),以開啟 [設定行為] 對話方塊。

  7. 選取自訂

  8. 在 [自訂] 清單中,選取所需的預存程序。

  9. 檢查 [方法引數] 和 [類別屬性] 清單,以確認 [方法引數] 對應至適當的 [類別屬性]。 將原始方法引數 (Original_<ArgumentName>) 對應至 UpdateDelete 的原始屬性 (<PropertyName> (Original))。

    注意

    根據預設,方法引數會對應至同名的類別屬性。 如果屬性名稱變更,使得資料表與實體類別之間不再對應,則您可能需要選取當 O/R 設計工具無法判斷正確的對應時,所要對應的對等類別屬性。

  10. 按一下 [確定] 或 [套用]

    注意

    完成每一項變更後按一下 [套用],即可繼續設定每個類別和行為組合的行為。 如果您在按一下 [套用] 之前變更類別或行為,則會出現警告對話方塊,讓您有機會套用變更。

若要還原成使用預設執行階段邏輯來進行更新,請在 [屬性] 視窗中按一下 [Insert]、[Update] 或 [Delete] 命令旁邊的省略符號,然後選取 [設定行為] 對話方塊中的 [使用執行階段]