ObjectContext.SaveChanges Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Persiste todas as atualizações na fonte de dados.
Sobrecargas
| Nome | Description |
|---|---|
| SaveChanges() |
Persiste todas as atualizações na fonte de dados e redefine o controle de alterações no contexto do objeto. |
| SaveChanges(Boolean) |
Obsoleto.
Persiste todas as atualizações na fonte de dados e, opcionalmente, redefine o controle de alterações no contexto do objeto. |
| SaveChanges(SaveOptions) |
Persiste todas as atualizações para a fonte de dados com a especificada SaveOptions. |
SaveChanges()
Persiste todas as atualizações na fonte de dados e redefine o controle de alterações no contexto do 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 Addedestado ou Deleted , Modifiedquando SaveChanges() chamado.
Exceções
Ocorreu uma violação de simultaneidade otimista na fonte de dados.
Exemplos
Este exemplo tenta salvar as 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.
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 persistente.
Se uma violação de simultaneidade otimista tiver ocorrido, uma violação 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.
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 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
Esse parâmetro é necessário para o suporte a transações do lado do cliente. Se true, o controle de alterações em todos os objetos será redefinido após SaveChanges(Boolean) a conclusão. Se false, você deve chamar o AcceptAllChanges() método após SaveChanges(Boolean).
Retornos
O número de objetos em um Addedestado ou Deleted , Modifiedquando SaveChanges() 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 a especificada 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.
Retornos
O número de objetos em um Addedestado ou Deleted , Modifiedquando SaveChanges() chamado.
Exceções
Ocorreu uma violação de simultaneidade otimista.
Comentários
Use essa sobrecarga específica para SaveChanges verificar se isso DetectChanges é chamado antes de salvar as alterações na fonte de dados ou que é chamada depois de AcceptAllChanges salvar as alterações na fonte de dados.
Essa enumeração tem uma FlagsAttribute 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 violação 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 chamando o SaveChanges método novamente.