LINQ to SQL 不會強制執行下列需求,但如果不符合這些需求,則行為未定義。
覆寫方法不得呼叫 SubmitChanges 或 Attach。 如果覆寫方法中呼叫這些方法,LINQ to SQL 會擲回例外狀況。
覆寫方法無法用來啟動、認可或停止交易。 作業 SubmitChanges 會在交易下執行。 內部巢狀交易可能會干擾外部交易。 只能在負載覆寫方法確定作業未在Transaction中執行之後,才能啟動一筆交易。
覆寫方法應該遵循適用的開放式並行對應。 覆寫方法預期會在發生開放式並行衝突時擲回 ChangeConflictException 。 LINQ to SQL 會攔截此例外狀況,以便正確處理 SubmitChanges 上 SubmitChanges所提供的選項。
建立 (
Insert) 和Update覆寫方法預期會在作業成功完成時,將資料庫產生之數據行的值傳回對應的物件成員。例如,如果
Order.OrderID對應至識別欄位(autoincrement 主鍵),則InsertOrder()override 方法必須擷取資料庫產生的 ID,並將Order.OrderID成員設定為該 ID。 同樣地,時間戳成員必須更新為資料庫產生的時間戳值,以確保更新的物件一致。 無法傳播資料庫產生的值,可能會導致資料庫與 所 DataContext追蹤的對象之間不一致。用戶必須負責叫用正確的動態 API。 例如,在更新覆寫方法中,只能呼叫 ExecuteDynamicUpdate 。 LINQ to SQL 不會偵測或驗證叫用的動態方法是否符合適用的作業。 如果呼叫不可套用的方法(例如, ExecuteDynamicDelete 要更新的物件),則結果為未定義。
最後,覆寫方法應該會執行已設定的作業。 LINQ to SQL 作業的語意,例如預先載入、延後載入、SubmitChanges,需要覆寫才能提供指定的服務。 例如,載入覆寫只會傳回空集合而不檢查資料庫中的內容,可能會導致數據不一致。