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 时处于 ModifiedDeletedSaveChanges() 状态的对象数。

例外

在数据源中发生了开放式并发冲突。

示例

此示例尝试保存更改,这可能导致并发冲突。 然后,此示例演示如何通过在重新保存更改前刷新对象上下文来解决并发冲突。

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。 可以通过以下方式解决开放式并发冲突,即捕获该冲突,使用 RefreshStoreWins 值调用 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 时处于 ModifiedDeletedSaveChanges() 状态的对象数。

属性

例外

发生了开放式并发冲突。

注解

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 时处于 ModifiedDeletedSaveChanges() 状态的对象数。

例外

发生了开放式并发冲突。

注解

使用 的 SaveChanges 此特定重载来确保 DetectChanges 在将更改保存到数据源之前调用 , AcceptAllChanges 或者在将更改保存到数据源后调用 。

此枚举的 允许 FlagsAttribute 按位组合其成员值。

若要确保客户端上的对象已由数据源端逻辑更新,可以在调用 Refresh 后使用 StoreWins 值调用 SaveChanges方法。 方法 SaveChanges 在事务中操作。 SaveChanges 如果无法保留任何一个脏 ObjectStateEntry 对象,将回滚该事务并引发异常。

如果发生了开放式并发冲突,则引发 OptimisticConcurrencyException。 可以通过以下方式解决开放式并发冲突,即捕获该冲突,使用 RefreshStoreWins 值调用 ClientWins 方法,然后再次调用 SaveChanges 方法。 有关详细信息,请参阅如何:在对象上下文中管理数据并发。

适用于