1

假设我对我的上下文进行查询以检索特定实体。

现在我想找到最好的方法来了解数据库中的相应行(让我们保持简单,实体和 SQL 表之间的 1-1 映射)自创建我的实体以来发生了变化。

我考虑过使用 TimeStamp 列并执行一个简单的查询,每个我想知道实体是否已过时,例如:

var uptodate = (from e in context.mySet
                where e.TimeStamp == entityTimeStamp
                select e).Any();

通过索引 TimeStamp 列,我认为这将是一个快速的方法,但不幸的是我没有在互联网上找到任何确认......

4

3 回答 3

1

如果您正在寻找一种无需修改表即可执行此操作的方法,您可以使用该CHECKSUM命令并在映射中添加一个附加列(大概是一个视图)。这样您就不必担心向数据库添加新列。

像这样的东西应该工作:

select *, 
    BINARY_CHECKSUM(*) as CheckSumValue
from test WITH (NOLOCK);

这是一些示例小提琴

话虽如此,有时最好在表中有一个 ModifiedDate 字段。如果是这种情况,那么这肯定是您检查更改的最佳方式。

祝你好运。

于 2013-01-17T23:38:07.767 回答
0

如果乐观锁没问题,那么在你的数据类的字段中添加 [ConcurrencyCheck] 属性怎么样。如果记录已被修改,这将导致更新失败。

该属性来自 System.ComponentModel.DataAnnotations

于 2013-01-19T03:30:48.703 回答
0

在使用 TimeStamp 进行进一步测试和调查后,通过查询了解它是否仍然相同(更准确地说,如果给定值仍在表中)似乎是最好的方法。

这种机制需要 TimeStamp 列上的索引以确保最佳性能(大约 O(Log(n) 而不是 (O(n)))。

于 2013-01-23T10:16:55.917 回答