模型优先方法中带Timestamp属性的EF并发处理
-
12-12-2019 - |
题
我试图实现在给出的解决方案 处理与实体框架的并发性ASP.NET MVC应用程序 .
文章说:
向部门实体添加跟踪属性
在模型\部门。cs,添加跟踪属性:
[Timestamp] public Byte[] Timestamp { get; set; }
Timestamp属性指定此列将包含在发送到数据库的Update和Delete命令的Where子句中。
因为我用的是 模型第一 方法,我遵循步骤1-5概述 使用实体框架创建时间戳列
- 将名为"Timestamp"的属性添加到EF的模型中的实体
- 将类型设置为二进制
- 将nullable设置为false
- 将StoreGeneratedPattern设置为Computed
- 将ConcurrencyMode设置为Fixed
当我从数据库模型,模型\部门更新我的代码。cs现在包含
public virtual byte[] Timestamp
{
get;
set;
}
然后我使用metadata类指定Timestamp属性:
// Metadata for Department entity
public class DepartmentMetadata
{
[Timestamp]
public byte Timestamp { get; set; }
}
Q1. 我测试了 Timestamp
在行编辑的情况下,列正在更改。事实并非如此。
编辑1 导致问题的原因是SQL Server列类型为 binary
, ,它应该是类型的 timestamp
.更改数据类型修复了Timestamp列无法更新的问题。
Q2. 我试图修改相同的实体(使用"在新选项卡中打开"),看看是否有 OptimisticConcurrencyException
被抛出。事实并非如此。我做错了什么?请帮我理解,谢谢。
解决方案
这个问题是因为我每个HTTP会话有一个ObjectContext,所以打开一个新标签并测试它会 不是 导致并发异常。
不隶属于 StackOverflow