我试图实现在给出的解决方案 处理与实体框架的并发性ASP.NET MVC应用程序 .

文章说:

向部门实体添加跟踪属性

在模型\部门。cs,添加跟踪属性:

[Timestamp] 
public Byte[] Timestamp { get; set; }

Timestamp属性指定此列将包含在发送到数据库的Update和Delete命令的Where子句中。

因为我用的是 模型第一 方法,我遵循步骤1-5概述 使用实体框架创建时间戳列

  1. 将名为"Timestamp"的属性添加到EF的模型中的实体
  2. 将类型设置为二进制
  3. 将nullable设置为false
  4. 将StoreGeneratedPattern设置为Computed
  5. 将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 被抛出。事实并非如此。我做错了什么?请帮我理解,谢谢。

Screenshot of my <code>Timestamp</code> property

有帮助吗?

解决方案

这个问题是因为我每个HTTP会话有一个ObjectContext,所以打开一个新标签并测试它会 不是 导致并发异常。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top