Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 如何检测实体是否过时,是否需要重新加载_Sql Server_Entity Framework 5 - Fatal编程技术网

Sql server 如何检测实体是否过时,是否需要重新加载

Sql server 如何检测实体是否过时,是否需要重新加载,sql-server,entity-framework-5,Sql Server,Entity Framework 5,假设我对上下文执行查询以检索特定实体 现在,我想找到一种最好的方法来了解数据库中的对应行(让我们保持简单,在实体和SQL表之间进行1-1映射)自创建实体以来是否发生了更改 我考虑过使用一个时间戳列并执行一个简单的查询,每次我都想知道实体是否过时,比如: var uptodate = (from e in context.mySet where e.TimeStamp == entityTimeStamp select e).Any(

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

现在,我想找到一种最好的方法来了解数据库中的对应行(让我们保持简单,在实体和SQL表之间进行1-1映射)自创建实体以来是否发生了更改

我考虑过使用一个时间戳列并执行一个简单的查询,每次我都想知道实体是否过时,比如:

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

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

如果您正在寻找一种不必修改表的方法,您可以使用
CHECKSUM
命令并向映射中添加一个额外的列(作为视图)。这样,您就不必担心向数据库中添加新列

像这样的方法应该会奏效:

select *, 
    BINARY_CHECKSUM(*) as CheckSumValue
from test WITH (NOLOCK);
这是一些样品

尽管如此,有时最好在表中有一个ModifiedDate字段。如果是这样,那么这肯定是检查更改的最佳方式


祝您好运。

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

像这样的方法应该会奏效:

select *, 
    BINARY_CHECKSUM(*) as CheckSumValue
from test WITH (NOLOCK);
这是一些样品

尽管如此,有时最好在表中有一个ModifiedDate字段。如果是这样,那么这肯定是检查更改的最佳方式


祝你好运。

如果乐观锁定可以,那么在数据类的字段中添加[ConcurrencyCheck]属性如何。如果记录已被修改,这将导致更新失败


该属性来自System.ComponentModel.DataAnnotations

如果乐观锁定正常,那么将[ConcurrencyCheck]属性添加到数据类的字段中如何。如果记录已被修改,这将导致更新失败


该属性来自System.ComponentModel.DataAnnotations

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


这种机制需要在时间戳列上建立一个索引,以确保最佳性能(大约是O(Log(n)而不是O(n))。

在使用时间戳和查询进行进一步的测试和调查后,知道它是否仍然相同(更准确地说,如果给定值仍然在表中),这似乎是最好的方法


这种机制需要时间戳列上的索引来确保最佳性能(大约是O(Log(n)而不是O(n)).

谢谢你的回答,但我想在客户端的C#中找到实现这一点的最佳方法。我不是指在不同的道具上运行服务器端,而是将其添加到视图中,并使用ORM处理该列。其工作方式与添加其他列相同,无需添加新列,也无需担心在更新时更新实体发生了变化。您将使用与上面的代码类似的代码来查看表中是否有任何内容发生了变化。也许我误解了您的问题。祝您好运。的确,但我不介意添加和额外的列,我认为时间戳应该比校验和计算快。速度现在对我来说是最重要的。我肯定会ree.查询表中的现有字段比任何计算都要快。我只是在过去非常成功地使用了这个方法,并认为这是解决您的问题的一个有趣的方法。听起来您很好。感谢您的回答,但我在客户端寻找在C#中实现这一点的最佳方法。我并不是在暗示要运行那个se另一个道具上的服务器端,而是将其添加到视图中并使用ORM处理该列。其工作方式与添加其他列相同,无需添加新列并担心在实体更改时更新。您可以使用与上面类似的代码来查看表中是否有任何更改。也许我误解了你的问题。祝你好运。的确,但我不介意添加额外的列,我认为时间戳应该比校验和计算快。速度现在对我来说是最重要的。我完全同意。查询表中现有字段将比任何计算都快。我在过去的几年中使用过这个方法很成功,并认为这是解决你问题的一个有趣的方法。听起来你很好。