Поделиться через


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

Возвращаемое значение

Число объектов в состоянии Added, Modified или 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).

Возвращаемое значение

Число объектов в состоянии Added, Modified или 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, определяющее поведение операции.

Возвращаемое значение

Число объектов в состоянии Added, Modified или Deleted на момент вызова метода SaveChanges().

Исключения

Произошло нарушение оптимистичного параллелизма.

Комментарии

Используйте эту конкретную перегрузку , SaveChanges чтобы убедиться, что DetectChanges вызывается перед сохранением изменений в источнике данных или после AcceptAllChanges сохранения изменений в источнике данных.

Это перечисление имеет объект FlagsAttribute , который позволяет использовать побитовое сочетание значений его членов.

Чтобы убедиться, что объекты на клиенте обновлены логикой на стороне источника данных, можно вызвать Refresh метод со значением StoreWins после вызова SaveChanges. Метод SaveChanges работает в транзакции. SaveChanges выполнит откат этой транзакции и вызовет исключение, если не удается сохранить какой-либо из "грязных ObjectStateEntry " объектов.

Если произошло нарушение оптимистичного параллелизма, вызывается исключение OptimisticConcurrencyException. Нарушение оптимистичного параллелизма можно разрешить, выявив его путем вызова метода Refresh со значениями StoreWins или ClientWins, а затем путем повторного вызова метода SaveChanges. Дополнительные сведения см. в разделе Практическое руководство. Управление параллелизмом данных в контексте объекта.

Применяется к