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

返回

调用时SaveChanges()处于或DeletedAddedModified状态的对象数。

例外

数据源中发生了乐观并发冲突。

示例

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

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());
    }
}

注解

若要确保客户端上的对象已由数据源端逻辑更新,可以在调用SaveChanges后使用StoreWins值调用Refresh该方法。

SaveChanges 在事务中操作。 SaveChanges 如果无法保留任何脏 ObjectStateEntry 对象,将回滚该事务并引发异常。

如果发生乐观并发冲突,则会引发一个 OptimisticConcurrencyException 。 可以通过捕获它、使用StoreWinsClientWins值调用Refresh方法,然后再次调用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,则必须在之后SaveChanges(Boolean)调用该方法AcceptAllChanges()

返回

调用时SaveChanges()处于或DeletedAddedModified状态的对象数。

属性

例外

发生了乐观并发冲突。

注解

请改为调用该方法 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 操作行为的值。

返回

调用时SaveChanges()处于或DeletedAddedModified状态的对象数。

例外

发生了乐观并发冲突。

注解

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

此枚举具有一个 FlagsAttribute 允许按位组合其成员值。

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

如果发生乐观并发冲突,则会引发一个 OptimisticConcurrencyException 。 可以通过捕获该冲突、使用StoreWinsClientWins值调用Refresh方法,然后再次调用SaveChanges该方法来解决乐观并发冲突。

适用于