为什么这些二进制/ RowVersion不匹配?

时间:2017-06-20 21:51:02

标签: c# .net linq linq-to-sql

我有一张像

这样的表格
                Thingy 
=======================================
| ... |        RowVersion     | ... |
=======================================

和另一个像

                Result 
=======================================
| ... |     ThingyRowVersion     | ... |
=======================================

在SQL Server中,列的类型为timestamp,而在C#中,列的类型为Binary。当我尝试使用相同的行版本创建结果时,我所看到的是一个问题,例如

Result r = new Result()
{
    ThingyRowVersion = (from t in Context.Thingies where t.Id == id select t.RowVersion).Single()
}  
Context.InsertOnSubmit(r);
Context.SubmitChanges();

提交更改后行版本不会相等。

在C#land中,他们在我提交之前似乎是平等的,但是当我提交时,我看到了不匹配的情况

0x0000000000002787 / 0x0000000000002782

知道这里发生了什么吗?

1 个答案:

答案 0 :(得分:1)

每当插入或更改行时,时间戳都会自动更新,并且用户无法正常操作。与它们最常见的操作是在使用乐观并发时用作检查,以查看自上次读取行以来该行是否已更新。你可能想要使用像UniqueIdentifier这样的东西来做你想做的事。