0
Ниже код создан с помощью инструмента Wep Api Odata v4 scaffolding.Asp.Net Web Api Odata V4 - Проверка параллелизма
PUT Метод
public IHttpActionResult Put([FromODataUri] string key, Delta<Product> patch)
{
Validate(patch.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Product product = db.Products.Find(key);
if (product == null)
{
return NotFound();
}
patch.Put(product);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!ProductExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(product);
}
ЗАПЛАТА Метод:
[AcceptVerbs("PATCH", "MERGE")]
public IHttpActionResult Patch([FromODataUri] string key, Delta<Product> patch)
{
Validate(patch.GetEntity());
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
Product product = db.Products.Find(key);
if (product == null)
{
return NotFound();
}
patch.Patch(product);
try
{
db.SaveChanges();
}
catch (DbUpdateConcurrencyException)
{
if (!ProductExists(key))
{
return NotFound();
}
else
{
throw;
}
}
return Updated(product);
}
Rowversion поля в модели
[Timestamp]
public byte[] RowVersion { get; set; }
Вопросы:
- Мне нужно реализовать проверку параллельности. Как проверить оптимистичный параллелизм в способе Odata (с помощью Etag)?
- В приведенном выше коде
DbUpdateConcurrencyException
никогда не выбрасывается. Любой причина? - Существует атрибут
[ConcurrencyCheck]
, что его использует ? Могу ли я использовать это?
Предоставление образца кода будет высоко оценено !.