ObjectContext.SaveChanges Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Сохраняет все обновления источника данных.
Перегрузки
| Имя | Описание |
|---|---|
| SaveChanges() |
Сохраняет все обновления источника данных и сбрасывает отслеживание изменений в контексте объекта. |
| SaveChanges(Boolean) |
Устаревшие..
Сохраняет все обновления источника данных и при необходимости сбрасывает отслеживание изменений в контексте объекта. |
| SaveChanges(SaveOptions) |
Сохраняет все обновления источника данных с указанным SaveOptions. |
SaveChanges()
Сохраняет все обновления источника данных и сбрасывает отслеживание изменений в контексте объекта.
public:
int SaveChanges();
public int SaveChanges();
member this.SaveChanges : unit -> int
Public Function SaveChanges () As Integer
Возвращаемое значение
Количество объектов в AddedModifiedсостоянии или Deleted состоянии при SaveChanges() вызове.
Исключения
В источнике данных произошло нарушение оптимистического параллелизма.
Примеры
В этом примере выполняется попытка сохранить изменения, которые могут вызвать конфликт параллелизма. Затем он демонстрирует, как устранить конфликт параллелизма, обновив контекст объекта перед повторной сохранением изменений.
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());
}
}
Комментарии
Чтобы убедиться, что объекты на клиенте были обновлены логикой источника данных, можно вызвать Refresh метод со StoreWins значением после вызова SaveChanges.
SaveChanges работает в рамках транзакции. SaveChanges откат этой транзакции и вызовет исключение, если не удается сохранить любой из грязных ObjectStateEntry объектов.
Если произошло нарушение оптимистического параллелизма, OptimisticConcurrencyException создается исключение. Вы можете устранить нарушение оптимистического параллелизма, перехватив его, вызвав Refresh метод со StoreWins значением или ClientWins значением, а затем снова вызовив SaveChanges .
См. также раздел
Применяется к
SaveChanges(Boolean)
Внимание
Use SaveChanges(SaveOptions options) instead.
Сохраняет все обновления источника данных и при необходимости сбрасывает отслеживание изменений в контексте объекта.
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
Параметры
- acceptChangesDuringSave
- Boolean
Этот параметр необходим для поддержки транзакций на стороне клиента. Если trueотслеживание изменений для всех объектов сбрасывается после SaveChanges(Boolean) завершения. Если falseметод должен вызываться AcceptAllChanges() после SaveChanges(Boolean).
Возвращаемое значение
Количество объектов в AddedModifiedсостоянии или Deleted состоянии при SaveChanges() вызове.
- Атрибуты
Исключения
Произошло нарушение оптимистического параллелизма.
Комментарии
SaveChanges(SaveOptions) Вместо этого вызовите метод.
Применяется к
SaveChanges(SaveOptions)
Сохраняет все обновления источника данных с указанным 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 Значение, определяющее поведение операции.
Возвращаемое значение
Количество объектов в AddedModifiedсостоянии или Deleted состоянии при SaveChanges() вызове.
Исключения
Произошло нарушение оптимистического параллелизма.
Комментарии
Используйте эту конкретную перегрузку SaveChanges , чтобы убедиться, что вызывается перед DetectChanges сохранением изменений в источнике данных или вызывается AcceptAllChanges после сохранения изменений в источнике данных.
Это перечисление имеет побитовое FlagsAttribute сочетание значений элементов.
Чтобы убедиться, что объекты на клиенте были обновлены логикой на стороне источника данных, можно вызвать Refresh метод со StoreWins значением после вызова SaveChanges. Метод SaveChanges работает в транзакции. SaveChanges откат этой транзакции и вызовет исключение, если не удается сохранить один из грязных ObjectStateEntry объектов.
Если произошло нарушение оптимистического параллелизма, OptimisticConcurrencyException создается исключение. Вы можете устранить нарушение оптимистического параллелизма, перехватив его, вызвав Refresh метод со StoreWins значениями или ClientWins значениями, а затем снова вызвав SaveChanges метод.