共用方式為


HOW TO:提交變更至資料庫 (LINQ to SQL)

不論對物件進行多少的變更,都只會變更記憶體中的複本。 並不會變更到資料庫中的實際資料。 在 DataContext 上明確呼叫 SubmitChanges 之前,變更都不會傳輸至伺服器。

進行這個呼叫時,DataContext 會嘗試將變更轉譯為對等的 SQL 命令。 您可以使用您自己的自訂邏輯來覆寫這些動作,但是提交順序則是由 DataContext 的服務 (稱為「變更處理器」(Change Processor)) 所安排。 事件順序如下:

  1. 呼叫 SubmitChanges 時,LINQ to SQL 會檢查這組已知的物件,判斷新的執行個體 (Instance) 是否已附加至它們。 如果已連接,則這些新的執行個體會加入至這組已追蹤的物件中。

  2. 所有具有暫止變更的物件,都會根據它們之間的相依性來排序為一串物件。 而變更是根據其他物件的物件,則會循序放在它們的相依性後面。

  3. 在傳輸任何實際變更之前,LINQ to SQL 會先啟動交易來封裝一系列個別的命令。

  4. 物件的變更會一個接著一個地轉換為 SQL 命令,並傳送給伺服器。

此時,資料庫偵測到的任何錯誤都會停止提交流程,並引發例外狀況。 而資料庫的所有變更都會復原為未進行提交之前的狀態。 DataContext 仍然具有所有變更的完整記錄。 因此,您可以嘗試更正問題,並再次呼叫 SubmitChanges,如下列程式碼範例所示。

範例

當提交交易順利完成時,DataContext 會略過變更追蹤資訊,以接受物件的變更。

Dim db As New Northwnd("c:\northwnd.mdf")

' Make changes here.
Sub MakeChanges()
    Try
        db.SubmitChanges()
    Catch e As ChangeConflictException
        Console.WriteLine(e.Message)
        ' Make some adjustments 
        '...
        ' Try again.
        db.SubmitChanges()
    End Try
End Sub
Northwnd db = new Northwnd(@"c:\northwnd.mdf");
// Make changes here. 
try
{
    db.SubmitChanges();
}
catch (ChangeConflictException e)
{
    Console.WriteLine(e.Message);
    // Make some adjustments.
    // ...
    // Try again.
    db.SubmitChanges();
}

請參閱

工作

HOW TO:偵測和解決衝突提交 (LINQ to SQL)

概念

下載範例資料庫 (LINQ to SQL)

其他資源

HOW TO:管理變更衝突 (LINQ to SQL)

進行和提交資料變更 (LINQ to SQL)