我正在尝试实现乐观并发检查。我使用通用存储库和工作单元模式。
我已经向我的实体引入了时间戳属性(作为字节数组),每当我更新数据时它会自动增加值(似乎是数据库管理的,这是它应该做的)。
我通过将 VM 映射到实际模型(使用 automapper)从视图模型加载更新的值。这会产生一个正确类型的实体的新(分离?)实例,并设置了所有相应的字段(包括时间戳)。
更新本身的执行方式如下
i_oOldEntity = m_oDbSet.Find(i_oEntity.MaterialId)
context.Entry(i_oOldEntity).CurrentValues.SetValues(i_oEntity)
context.SaveChanges()
i_oEntity 是自动映射的实体。
这会很好地更新值本身,但是它完全忽略了来自视图模型的时间戳值。生成的 SQL 代码在 WHERE 子句中使用最新的 rowversion 值。
简而言之:如何让我的 viewmodel-timestamp 值在 EF 的 WHERE 子句中使用?