ObjectContext.SaveChanges Método

Definição

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

Sobrecargas

Name Description
SaveChanges()

Persiste todas as atualizações na fonte de dados e reinicia o rastreamento de alterações no contexto do objeto.

SaveChanges(Boolean)
Obsoleto.

Persiste todas as atualizações da fonte de dados e, opcionalmente, reinicia o rastreamento de alterações no contexto do objeto.

SaveChanges(SaveOptions)

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

SaveChanges()

Persiste todas as atualizações na fonte de dados e reinicia o rastreamento de alterações no contexto do objeto.

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

Devoluções

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

Exceções

Ocorreu uma violação otimista da concorrência na fonte de dados.

Exemplos

Este exemplo tenta guardar alterações, o que pode causar um conflito de concorrência. Depois, demonstra como resolver o conflito de concorrência atualizando o contexto do objeto antes de voltar a guardar 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());
    }
}

Observações

Para garantir que os objetos no cliente foram atualizados por lógica do lado da fonte de dados, pode chamar o Refresh método com o StoreWins valor após chamar SaveChanges. Para mais informações, consulte Poupar Alterações e Gerir a Concorrência.

SaveChanges opera dentro de uma transação. SaveChanges Reverte essa transação e lança uma exceção se algum dos objetos sujos ObjectStateEntry não puder ser mantido.

Se ocorrer uma violação de concorrência otimista, é lançado um OptimisticConcurrencyException lançamento. Pode resolver uma violação de concorrência otimista apanhando-a, chamando o Refresh método com o StoreWins valor ou ClientWins , e depois ligando SaveChanges novamente. Para mais informações, veja Como: Gerir a Concorrência de Dados no Contexto do Objeto.

Ver também

Aplica-se a

SaveChanges(Boolean)

Atenção

Use SaveChanges(SaveOptions options) instead.

Persiste todas as atualizações da fonte de dados e, opcionalmente, reinicia o rastreamento de alterações no contexto do 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

Este parâmetro é necessário para o suporte a transações do lado do cliente. Se true, o acompanhamento de alterações em todos os objetos é reiniciado após SaveChanges(Boolean) terminar. Se false, deve chamar o AcceptAllChanges() método após SaveChanges(Boolean).

Devoluções

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

Atributos

Exceções

Ocorreu uma violação otimista da concorrência.

Observações

Chama o SaveChanges(SaveOptions) método em vez disso.

Aplica-se a

SaveChanges(SaveOptions)

Persiste todas as atualizações da fonte de dados com o especificado 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

Parâmetros

options
SaveOptions

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

Devoluções

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

Exceções

Ocorreu uma violação otimista da concorrência.

Observações

Use esta sobrecarga específica para SaveChanges garantir DetectChanges que é chamada antes de guardar alterações na fonte de dados ou que AcceptAllChanges é chamada depois de guardar as alterações na fonte de dados.

Esta enumeração tem um FlagsAttribute que permite uma combinação bit a bit dos seus valores membros.

Para garantir que os objetos no cliente foram atualizados por lógica do lado da fonte de dados, pode chamar o Refresh método com o StoreWins valor após chamar SaveChanges. O SaveChanges método opera numa transação. SaveChanges reverterá essa transação e lançará uma exceção se algum dos objetos sujos ObjectStateEntry não puder ser mantido.

Se ocorrer uma violação de concorrência otimista, é lançado um OptimisticConcurrencyException lançamento. Pode resolver uma violação de concorrência otimista apanhando-a, chamando o Refresh método com valores StoreWins ou ClientWins e depois chamando novamente o SaveChanges método. Para mais informações, veja Como: Gerir a Concorrência de Dados no Contexto do Objeto.

Aplica-se a