이 내 OdataController
낙관적 동시성 처리 Asp.Net WebApi 중 하나로, OData V4
public async Task<IHttpActionResult> Patch([FromODataUri] int key, Delta<Product> patch)
{
Validate(patch.GetInstance());
Product product = await service.Products.GetAsync(key);
if (product == null)
return NotFound();
patch.Put(product);
try
{
await service.Products.UpdateAsync(product);
}
catch (DbUpdateConcurrencyException)
{
if (!await service.Products.ExistAsync(key))
return NotFound();
else
throw;
}
return Updated(product);
}
내 모델의 Patch
방법 인 속성이 있습니다. Etag를 사용하여 동시성 검사 메커니즘을 구현해야합니다. 나는 here 몇 가지 예제를 보았습니다. 그러나 그들은 델타 메소드를 사용하지 않습니다.
- etags를 사용하여 동시성을 어떻게 확인할 수 있습니까?
- 동시성 해킹에 대한 사용자 지정 특성을 구현할 수 있습니까? 마찬가지로
뭔가 :
[CustomConcurrencyCheck]
public async Task<IHttpActionResult> Put([FromODataUri] int key, Delta<Product> patch)
{
...
}
간단한 예제를 제공은 높게 평가 될 것입니다. WebApiConfig
최초
델타를 사용하는 경우 변경된 속성 만 가져옵니다. ETag 또는 RowVersion은 속성 이었지만이를 변경 했습니까? 당연히 아니지. 둘 다 델타 데이터에 없습니다. ETag 또는 RowVersion의 이전 값을 가지고 있지 않다면 어떻게 비교할 것입니까? –
동일한 키에 대해 두 번 이상의 Put 작업이 동시에 처리되는 경우 현재 지점에서 DbUpdateConcurrencyException 만 표시됩니다. –