2012-10-08 104 views
2

我试图实现乐观并发检查实体框架的实体更新。我使用通用资源库和工作模式单元。忽略时间戳

我已经介绍了时间戳的归属特性(如字节数组)到我的实体,每当我更新数据,自动增加值(好像是数据库管理,这是它应该做的)。

我通过(使用automapper)的VM映射到实际模型加载从一个视图模型的更新的值。这将导致所有的设置(包括时间戳)的根据字段正确类型的实体的一个新的(分开?)实例。

更新本身就像

i_oOldEntity = m_oDbSet.Find(i_oEntity.MaterialId) 
context.Entry(i_oOldEntity).CurrentValues.SetValues(i_oEntity) 
context.SaveChanges() 

与i_oEntity作为automapped实体执行。

这将更新值本身很好,但是它完全忽略时间戳值从视图模型来。生成的SQL代码使用WHERE子句中的最新rowversion值。

总之:我如何才能从EF WHERE子句中使用我的视图模型时间戳值?

回答

-2

请更新OriginalValues->RowVersion,你会得到天堂=)

0

假设:

var target = dbContext.Employees.Find(dto.Id); 

这种技术导致EF5在更新时,在where子句中使用DTO的时间戳值,并会引发乐观并发如果异常DTO的时间戳不匹配数据库中的时间戳值:

context.Entry(target).Property(o => o.Timestamp).OriginalValue = dto.Timestamp; 
context.Entry(target).Property(o => o.Timestamp).IsModified = true; 

更新OriginalValue独行无不要在EF5中做任何事情。

相关问题