特性的属性,如下例中所示:

<Property Name="Status" Type="Byte" Nullable="false" ConcurrencyMode="Fixed" />

在这种情况下,如果用于执行更新的存储过程报告更新了零行,则会引发该异常。

这样,通过消除缓存数据的更改与数据源中相应数据的更改之间的冲突,可以确保对象缓存中更改过的所有数据都可以成功地保存回数据源。

这样可确保将触发器生成的值发送回对象上下文中的 SalesOrderHeader 对象。

如果发生 OptimisticConcurrencyException,应通过调用 Refresh 并指定是否解决冲突(通过将数据保存到对象数据 (ClientWins) 或通过使用数据源数据更新对象缓存 (StoreWins))来处理该异常,如下面的示例所示:

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

OverwriteChanges 值重新加载该对象。

如何:在对象上下文中管理数据并发性(实体框架)。

管理连接和事务(实体框架)。

 

MergeOption的说明:

  成员名称 说明
  AppendOnly AppendOnly 是默认合并选项。
  NoTracking 但是,Entity Framework 生成的实体和具有代理的 POCO 实体将维护对该对象上下文的引用以便于相关对象的加载。
  OverwriteChanges Unchanged,任何属性都不会标记为已修改。
  PreserveChanges 对象上下文中不存在的对象将附加到该上下文。

Unchanged,并且属性没有标记为已修改。

数据源中的值将覆盖原始的未修改属性的值。

如果这些值不相同,那么该属性将标记为已修改。

在 .NET Framework 3.5 SP1 版中,即使数据源中的值不同,Entity Framework 也不会将该属性标记为已修改。

SaveChanges 时,只有修改过的属性才会保留到数据源。

Saving Changes and Managing Concurrency (Entity Framework)

相关文章:

  • 2021-12-21
  • 2021-12-19
  • 2022-01-26
  • 2021-12-09
  • 2021-06-16
  • 2021-11-28
  • 2021-06-10
猜你喜欢
  • 2022-01-02
  • 2021-12-02
  • 2021-04-02
  • 2022-12-23
相关资源
相似解决方案