共用方式為


開發人員在覆寫預設行為中的責任

LINQ to SQL 不會強制執行下列需求,但如果不符合這些需求,則行為未定義。

  • 覆寫方法不得呼叫 SubmitChangesAttach。 如果覆寫方法中呼叫這些方法,LINQ to SQL 會擲回例外狀況。

  • 覆寫方法無法用來啟動、認可或停止交易。 作業 SubmitChanges 會在交易下執行。 內部巢狀交易可能會干擾外部交易。 只能在負載覆寫方法確定作業未在Transaction中執行之後,才能啟動一筆交易。

  • 覆寫方法應該遵循適用的開放式並行對應。 覆寫方法預期會在發生開放式並行衝突時擲回 ChangeConflictException 。 LINQ to SQL 會攔截此例外狀況,以便正確處理 SubmitChangesSubmitChanges所提供的選項。

  • 建立 (Insert) 和 Update 覆寫方法預期會在作業成功完成時,將資料庫產生之數據行的值傳回對應的物件成員。

    例如,如果 Order.OrderID 對應至識別欄位(autoincrement 主鍵),則 InsertOrder() override 方法必須擷取資料庫產生的 ID,並將 Order.OrderID 成員設定為該 ID。 同樣地,時間戳成員必須更新為資料庫產生的時間戳值,以確保更新的物件一致。 無法傳播資料庫產生的值,可能會導致資料庫與 所 DataContext追蹤的對象之間不一致。

  • 用戶必須負責叫用正確的動態 API。 例如,在更新覆寫方法中,只能呼叫 ExecuteDynamicUpdate 。 LINQ to SQL 不會偵測或驗證叫用的動態方法是否符合適用的作業。 如果呼叫不可套用的方法(例如, ExecuteDynamicDelete 要更新的物件),則結果為未定義。

  • 最後,覆寫方法應該會執行已設定的作業。 LINQ to SQL 作業的語意,例如預先載入、延後載入、SubmitChanges,需要覆寫才能提供指定的服務。 例如,載入覆寫只會傳回空集合而不檢查資料庫中的內容,可能會導致數據不一致。

另請參閱