我正在尝试实施Handling Concurrency with the Entity Framework in an ASP.NET MVC Application 中提供的解决方案。
文章说:
将跟踪属性添加到部门实体
在Models \ Department.cs中,添加一个跟踪属性:
[Timestamp] public Byte[] Timestamp { get; set; }
Timestamp属性指定此列将包含在发送到数据库的Update和Delete命令的Where子句中。
由于我使用模型优先方法,因此我按照Creating a Timestamp column with Entity Framework
中概述的步骤1 - 5进行操作当我从数据库模型更新代码时,Models \ Department.cs现在包含
public virtual byte[] Timestamp
{
get;
set;
}
然后我使用元数据类来指定Timestamp属性:
// Metadata for Department entity
public class DepartmentMetadata
{
[Timestamp]
public byte Timestamp { get; set; }
}
Q1。我测试了Timestamp
列的值是否在行编辑时发生了变化。它不是。
编辑1 问题是由于SQL Server列类型为binary
引起的,它应该是timestamp
类型。更改数据类型修复了Timestamp列未更新的问题。
Q2。我试图修改同一个实体(使用"在新标签中打开")以查看是否抛出了OptimisticConcurrencyException
。它不是。我究竟做错了什么?请帮助我理解,谢谢。
答案 0 :(得分:3)
问题是由于每个HTTP会话都有一个ObjectContext,因此打开一个新选项卡并测试它会 NOT 导致并发异常。