C# 如何将EF设置为在数据库上修改以前加载的实体时不允许保存更改? 我通过EF加载一个实体 我在代码中遇到了一个断点 并通过数据库上的SQLServerManagementStudio修改加载的实体 我点击F5并调用base.SaveChanges()

C# 如何将EF设置为在数据库上修改以前加载的实体时不允许保存更改? 我通过EF加载一个实体 我在代码中遇到了一个断点 并通过数据库上的SQLServerManagementStudio修改加载的实体 我点击F5并调用base.SaveChanges(),c#,.net,sql-server-2008,entity-framework,entity-framework-4.1,C#,.net,Sql Server 2008,Entity Framework,Entity Framework 4.1,我的期望是EF会抛出异常,因为Db上的实体与加载的实体不同 问题: 我应该怎么做,以便在保存更改时EF检查数据库中实体上未修改的属性是否不同,从而通过抛出异常防止保存 您需要的是并发检查 在实体框架中,每个实体属性都有一个并发模式。如果将此模式更改为“固定”,则在更新数据时将检查该实体属性 要使其更易于使用,可以做的一件事是包含时间戳属性,将其并发模式设置为固定,然后在SQL Server中创建触发器,以便在每次更新记录时更新时间戳字段 这样就不需要将任何其他实体属性的并发模式设置为固定模式,因

我的期望是EF会抛出异常,因为Db上的实体与加载的实体不同

问题:
我应该怎么做,以便在保存更改时EF检查数据库中实体上未修改的属性是否不同,从而通过抛出异常防止保存

您需要的是并发检查

在实体框架中,每个实体属性都有一个
并发模式
。如果将此模式更改为“固定”,则在更新数据时将检查该实体属性

要使其更易于使用,可以做的一件事是包含
时间戳
属性,将其并发模式设置为固定,然后在SQL Server中创建
触发器
,以便在每次更新记录时更新
时间戳
字段

这样就不需要将任何其他实体属性的并发模式设置为固定模式,因为数据库记录中的任何更改(无论是通过实体框架保存还是通过任何其他方式保存)都将导致更新
时间戳
,并且在实体框架中之后的任何
保存
操作都将检查该
时间戳
的值。这种机制称为乐观并发。

您感兴趣的还可以看看。你可能会发现它很有用