ObjectContext.SaveChanges 메서드

정의

데이터 소스에 대한 모든 업데이트를 유지합니다.Persists all updates to the data source.

오버로드

SaveChanges()

데이터 소스에 대한 모든 업데이트를 유지하고 개체 컨텍스트에서 변경 내용 추적을 다시 설정합니다.Persists all updates to the data source and resets change tracking in the object context.

SaveChanges(Boolean)

데이터 소스에 대한 모든 업데이트를 유지하고 선택적으로 개체 컨텍스트에서 변경 내용 추적을 다시 설정합니다.Persists all updates to the data source and optionally resets change tracking in the object context.

SaveChanges(SaveOptions)

지정된 SaveOptions를 사용하여 데이터 소스에 대한 모든 업데이트를 유지합니다.Persists all updates to the data source with the specified SaveOptions.

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가 호출된 경우 Modified, Deleted 또는 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 모델합니다.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 해당 트랜잭션을 롤백하고 예외를 throw 있으면 더티 ObjectStateEntry 개체를 유지할 수 없습니다.SaveChanges will roll back that transaction and throw an exception if any of the dirty ObjectStateEntry objects cannot be persisted.

낙관적 동시성 위반이 발생하면 OptimisticConcurrencyException이 throw됩니다.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. 낙관적 동시성 위반을 catch하여 해결하려면 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)

경고

이 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

이 매개 변수는 클라이언트 쪽 트랜잭션을 지원하는 데 필요합니다.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가 호출된 경우 Modified, Deleted 또는 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)

지정된 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 값입니다.A SaveOptions value that determines the behavior of the operation.

반환

Added가 호출된 경우 Modified, Deleted 또는 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 해당 트랜잭션을 롤백하고 중 하나라도 변경 된 경우 예외를 throw ObjectStateEntry 개체를 유지할 수 없습니다.SaveChanges will roll back that transaction and throw an exception if any one of the dirty ObjectStateEntry objects cannot be persisted.

낙관적 동시성 위반이 발생하면 OptimisticConcurrencyException이 throw됩니다.If an optimistic concurrency violation has occurred, an OptimisticConcurrencyException is thrown. 낙관적 동시성 위반을 catch하여 해결하려면 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.

적용 대상