Compartilhar via


ObjectContext.SaveChanges Método

Definição

Persiste todas as atualizações na fonte de dados.

Sobrecargas

SaveChanges()

Persiste todas as atualizações na fonte de dados e redefine o controle de alterações no contexto de objeto.

SaveChanges(Boolean)
Obsoleto.

Persiste todas as atualizações na fonte de dados e, opcionalmente, redefine o controle de alterações no contexto de objeto.

SaveChanges(SaveOptions)

Persiste todas as atualizações para a fonte de dados com o SaveOptions especificado.

SaveChanges()

Persiste todas as atualizações na fonte de dados e redefine o controle de alterações no contexto de objeto.

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

Retornos

O número de objetos em um estado Added, Modified ou Deleted quando SaveChanges() foi chamado.

Exceções

Ocorreu uma violação de simultaneidade otimista na fonte de dados.

Exemplos

Este exemplo tenta salvar alterações, o que pode causar um conflito de simultaneidade. Em seguida, ele demonstra como resolver o conflito de simultaneidade atualizando o contexto do objeto antes de salvar novamente as alterações.

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());
    }
}

Comentários

Para garantir que os objetos no cliente tenham sido atualizados pela lógica do lado da fonte de dados, você pode chamar o Refresh método com o StoreWins valor depois de chamar SaveChanges. Para obter mais informações, consulte Salvando alterações e gerenciando simultaneidade.

SaveChanges opera dentro de uma transação. SaveChanges reverterá essa transação e lançará uma exceção se qualquer um dos objetos sujos ObjectStateEntry não puder ser persistido.

Se uma violação de simultaneidade otimista tiver ocorrido, uma OptimisticConcurrencyException será gerada. Você pode resolver uma violação de simultaneidade otimista capturando-a, chamando o Refresh método com o StoreWins valor ou ClientWins e chamando SaveChanges novamente. Para obter mais informações, consulte Como gerenciar a simultaneidade de dados no contexto do objeto.

Confira também

Aplica-se a

SaveChanges(Boolean)

Cuidado

Use SaveChanges(SaveOptions options) instead.

Persiste todas as atualizações na fonte de dados e, opcionalmente, redefine o controle de alterações no contexto de objeto.

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

Parâmetros

acceptChangesDuringSave
Boolean

Esse parâmetro será necessário para suporte à transações do lado do cliente. Se for true, o controle de alterações em todos os objetos será redefinido após a conclusão do SaveChanges(Boolean). Se for false, você deverá chamar o método AcceptAllChanges() após SaveChanges(Boolean).

Retornos

O número de objetos em um estado Added, Modified ou Deleted quando SaveChanges() foi chamado.

Atributos

Exceções

Ocorreu uma violação de simultaneidade otimista.

Comentários

Em vez disso, chame o SaveChanges(SaveOptions) método .

Aplica-se a

SaveChanges(SaveOptions)

Persiste todas as atualizações para a fonte de dados com o SaveOptions especificado.

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

Parâmetros

options
SaveOptions

Um valor SaveOptions que determina o comportamento da operação.

Retornos

O número de objetos em um estado Added, Modified ou Deleted quando SaveChanges() foi chamado.

Exceções

Ocorreu uma violação de simultaneidade otimista.

Comentários

Use essa sobrecarga específica de para certificar-se de SaveChanges que DetectChanges é chamado antes de salvar as alterações na fonte de dados ou que é chamado depois de AcceptAllChanges salvar as alterações na fonte de dados.

Essa enumeração tem um FlagsAttribute que permite uma combinação bit a bit de seus valores de membro.

Para garantir que os objetos no cliente tenham sido atualizados pela lógica do lado da fonte de dados, você pode chamar o Refresh método com o StoreWins valor depois de chamar SaveChanges. O SaveChanges método opera em uma transação. SaveChanges reverterá essa transação e lançará uma exceção se qualquer um dos objetos sujos ObjectStateEntry não puder ser persistido.

Se uma violação de simultaneidade otimista tiver ocorrido, uma OptimisticConcurrencyException será gerada. Você pode resolver uma violação de simultaneidade otimista capturando-a, chamando o Refresh método com os StoreWins valores ou ClientWins e, em seguida, chamando o SaveChanges método novamente. Para obter mais informações, consulte Como gerenciar a simultaneidade de dados no contexto do objeto.

Aplica-se a