ObjectContext.SaveChanges ObjectContext.SaveChanges ObjectContext.SaveChanges ObjectContext.SaveChanges Method

定義

すべての更新をデータ ソースに保存します。Persists all updates to the data source.

オーバーロード

SaveChanges() SaveChanges() SaveChanges() SaveChanges()

すべての更新をデータ ソースに保存し、オブジェクト コンテキストの変更の追跡をリセットします。Persists all updates to the data source and resets change tracking in the object context.

SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean)

すべての更新をデータ ソースに保存し、必要に応じてオブジェクト コンテキストの変更の追跡をリセットします。Persists all updates to the data source and optionally resets change tracking in the object context.

SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions)

指定した SaveOptions を使用して、すべての更新をデータ ソースに保存します。Persists all updates to the data source with the specified SaveOptions.

SaveChanges() SaveChanges() SaveChanges() SaveChanges()

すべての更新をデータ ソースに保存し、オブジェクト コンテキストの変更の追跡をリセットします。Persists all updates to the data source and resets change tracking in the object context.

public:
 int SaveChanges();
public int SaveChanges ();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer

戻り値

Added が呼び出されたときに ModifiedDeleted、または SaveChanges() の状態にあったオブジェクトの数。The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

例外

データ ソースでオプティミスティック コンカレンシー違反が発生しました。An optimistic concurrency violation has occurred in the data source.

この例がに基づいて、 AdventureWorks Sales Modelします。This example is based on the AdventureWorks Sales Model. この例では、変更を保存します。これにより、コンカレンシーの競合が発生する可能性があります。This example tries to save changes, which may cause a concurrency conflict. その後、変更を再度保存する前にオブジェクト コンテキストを更新することでコンカレンシーの競合を解決する方法を示します。Then, it demonstrates how to resolve the concurrency conflict by refreshing the object context before re-saving changes.

using (AdventureWorksEntities context =
    new AdventureWorksEntities())
{
    try
    {
        // Perform an operation with a high-level of concurrency.
        // Change the status of all orders without an approval code.
        ObjectQuery<SalesOrderHeader> orders =
            context.SalesOrderHeaders.Where(
            "it.CreditCardApprovalCode IS NULL").Top("100");

        foreach (SalesOrderHeader order in orders)
        {
            // Reset the order status to 4 = Rejected.
            order.Status = 4;
        }
        try
        {
            // Try to save changes, which may cause a conflict.
            int num = context.SaveChanges();
            Console.WriteLine("No conflicts. " +
                num.ToString() + " updates saved.");
        }
        catch (OptimisticConcurrencyException)
        {
            // Resolve the concurrency conflict by refreshing the 
            // object context before re-saving changes. 
            context.Refresh(RefreshMode.ClientWins, orders);

            // Save changes.
            context.SaveChanges();
            Console.WriteLine("OptimisticConcurrencyException "
            + "handled and changes saved");
        }

        foreach (SalesOrderHeader order in orders)
        {
            Console.WriteLine("Order ID: " + order.SalesOrderID.ToString()
                + " Order status: " + order.Status.ToString());
        }
    }
    catch (UpdateException ex)
    {
        Console.WriteLine(ex.ToString());
    }
}
Using context As New AdventureWorksEntities()
    Try
        ' Perform an operation with a high-level of concurrency. 
        ' Change the status of all orders without an approval code. 
        Dim orders As ObjectQuery(Of SalesOrderHeader) = context.SalesOrderHeaders.Where("it.CreditCardApprovalCode IS NULL").Top("100")

        For Each order As SalesOrderHeader In orders
            ' Reset the order status to 4 = Rejected. 
            order.Status = 4
        Next
        Try
            ' Try to save changes, which may cause a conflict. 
            Dim num As Integer = context.SaveChanges()
            Console.WriteLine("No conflicts. " & num.ToString() & " updates saved.")
        Catch generatedExceptionName As OptimisticConcurrencyException
            ' Resolve the concurrency conflict by refreshing the 
            ' object context before re-saving changes. 
            context.Refresh(RefreshMode.ClientWins, orders)

            ' Save changes. 
            context.SaveChanges()
            Console.WriteLine("OptimisticConcurrencyException handled and changes saved")
        End Try

        For Each order As SalesOrderHeader In orders
            Console.WriteLine(("Order ID: " & order.SalesOrderID.ToString() & " Order status: ") + order.Status.ToString())
        Next
    Catch ex As UpdateException
        Console.WriteLine(ex.ToString())
    End Try
End Using

注釈

クライアント上のオブジェクトがデータ ソース側のロジックで更新されるようにするには、Refresh の呼び出し後に StoreWins 値を指定して SaveChanges メソッドを呼び出します。To ensure that objects on the client have been updated by data source-side logic, you can call the Refresh method with the StoreWins value after you call SaveChanges. 詳細については、次を参照してください。変更の保存と同時実行の管理します。For more information, see Saving Changes and Managing Concurrency.

SaveChanges トランザクション内で動作します。SaveChanges operates within a transaction. SaveChanges そのトランザクションをロールバックし、ダーティの場合は、例外をスローObjectStateEntryオブジェクトを永続化することはできません。SaveChanges will roll back that transaction and throw an exception if any of the dirty ObjectStateEntry objects cannot be persisted.

オプティミスティック コンカレンシー違反が発生した場合は、OptimisticConcurrencyException がスローされます。If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. オプティミスティック コンカレンシー違反を解決するには、その違反をキャッチし、Refresh 値または StoreWins 値を指定して ClientWins メソッドを呼び出し、SaveChanges を再度呼び出します。You can resolve an optimistic concurrency violation by catching it, calling the Refresh method with the StoreWins or ClientWins value, and then calling SaveChanges again. 詳細については、「方法 :オブジェクト コンテキスト内のデータの同時実行管理します。For more information, see How to: Manage Data Concurrency in the Object Context.

こちらもご覧ください

SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean) SaveChanges(Boolean)

警告

この API は現在使われていません。

すべての更新をデータ ソースに保存し、必要に応じてオブジェクト コンテキストの変更の追跡をリセットします。Persists all updates to the data source and optionally resets change tracking in the object context.

public:
 int SaveChanges(bool acceptChangesDuringSave);
[System.ComponentModel.Browsable(false)]
[System.Obsolete("Use SaveChanges(SaveOptions options) instead.")]
public int SaveChanges (bool acceptChangesDuringSave);
member this.SaveChanges : bool -> int
Public Function SaveChanges (acceptChangesDuringSave As Boolean) As Integer

パラメーター

acceptChangesDuringSave
Boolean Boolean Boolean Boolean

このパラメーターは、クライアント側トランザクションのサポートに必要です。This parameter is needed for client-side transaction support. true の場合は、SaveChanges(Boolean) の完了後にすべてのオブジェクトに対する変更の追跡がリセットされます。If true, the change tracking on all objects is reset after SaveChanges(Boolean) finishes. false の場合は、AcceptAllChanges() の後に SaveChanges(Boolean) メソッドを呼び出す必要があります。If false, you must call the AcceptAllChanges() method after SaveChanges(Boolean).

戻り値

Added が呼び出されたときに ModifiedDeleted、または SaveChanges() の状態にあったオブジェクトの数。The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

例外

オプティミスティック コンカレンシー違反が発生しました。An optimistic concurrency violation has occurred.

注釈

呼び出す、SaveChanges(SaveOptions)メソッド代わりにします。Call the SaveChanges(SaveOptions) method instead.

SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions) SaveChanges(SaveOptions)

指定した SaveOptions を使用して、すべての更新をデータ ソースに保存します。Persists all updates to the data source with the specified SaveOptions.

public:
 virtual int SaveChanges(System::Data::Objects::SaveOptions options);
public virtual int SaveChanges (System.Data.Objects.SaveOptions options);
abstract member SaveChanges : System.Data.Objects.SaveOptions -> int
override this.SaveChanges : System.Data.Objects.SaveOptions -> int
Public Overridable Function SaveChanges (options As SaveOptions) As Integer

パラメーター

options
SaveOptions SaveOptions SaveOptions SaveOptions

操作の動作を決定する SaveOptions 値。A SaveOptions value that determines the behavior of the operation.

戻り値

Added が呼び出されたときに ModifiedDeleted、または SaveChanges() の状態にあったオブジェクトの数。The number of objects in an Added, Modified, or Deleted state when SaveChanges() was called.

例外

オプティミスティック コンカレンシー違反が発生しました。An optimistic concurrency violation has occurred.

注釈

この特定のオーバー ロードを使用して、SaveChangesかことを確認するDetectChangesまたはデータ ソースに変更を保存する前に呼び出されるAcceptAllChangesデータ ソースに変更を保存した後に呼び出されます。Use this specific overload of SaveChanges to either make sure that DetectChanges is called before you save changes to the data source or that AcceptAllChanges is called after you save changes to the data source.

この列挙体は、FlagsAttributeメンバー値のビットごとの組み合わせをできるようにします。This enumeration has a FlagsAttribute that allows for a bitwise combination of its member values.

クライアント上のオブジェクトがデータ ソース側のロジックで更新されたことを確認するを呼び出すことができます、RefreshメソッドをStoreWins値の呼び出し後SaveChangesします。To make sure that objects on the client have been updated by data source-side logic, you can call the Refresh method with the StoreWins value after you call SaveChanges. SaveChangesメソッドがトランザクションで動作します。The SaveChanges method operates in a transaction. SaveChanges トランザクションをロールバックされ、いずれか、ダーティの場合は、例外をスローObjectStateEntryオブジェクトを永続化することはできません。SaveChanges will roll back that transaction and throw an exception if any one of the dirty ObjectStateEntry objects cannot be persisted.

オプティミスティック コンカレンシー違反が発生した場合は、OptimisticConcurrencyException がスローされます。If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. オプティミスティック コンカレンシー違反を解決するには、その違反をキャッチし、Refresh 値または StoreWins 値を指定して ClientWins メソッドを呼び出し、SaveChanges メソッドを再度呼び出します。You can resolve an optimistic concurrency violation by catching it, calling the Refresh method with the StoreWins or ClientWins values, and then calling the SaveChanges method again. 詳細については、「方法 :オブジェクト コンテキスト内のデータの同時実行管理します。For more information, see How to: Manage Data Concurrency in the Object Context.

適用対象