特性的属性,如下例中所示:
<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)。 |