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
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.