我有一个 WebAPI OData 控制器,它使用 Delta 对我的实体进行部分更新。
在我的实体框架模型中,我有一个版本字段。这是 SQL Server 数据库中的行版本,映射到实体框架中的字节数组,其并发模式设置为固定(它首先使用数据库)。
我正在使用 fiddler 使用 Version 字段的陈旧值发回部分更新。我从上下文中加载当前记录,然后在顶部修补更改的字段,这会更改版本列中的值而不会引发错误,然后当我在上下文中保存更改时,所有内容都会保存而不会出现错误。显然这是意料之中的,正在保存的实体尚未从上下文中分离出来,所以我如何使用 Delta 实现乐观并发。
我正在使用所有东西的最新版本(或者就在圣诞节前),所以实体框架 6.0.1 和 OData 5.6.0
public IHttpActionResult Put([FromODataUri]int key, [FromBody]Delta<Job> delta)
{
using (var tran = new TransactionScope())
{
Job j = this._context.Jobs.SingleOrDefault(x => x.JobId == key);
delta.Patch(j);
this._context.SaveChanges();
tran.Complete();
return Ok(j);
}
}
谢谢