У меня есть такое действие контроллера (ASP.NET web api)
public HttpResponseMessage<Component> Post(Component c)
{
//Don't allow equal setup ids in within the same installation when the component is of type 5
if (db.Components.Any(d => d.InstallationId == c.InstallationId && d.SetupId == c.SetupId && d.ComponentTypeId == 5)) return new HttpResponseMessage<Component>(c, HttpStatusCode.Conflict);
db.Components.Add(c);
db.SaveChanges();
return new HttpResponseMessage<Component>(c, HttpStatusCode.OK);
}
Я отправляю запрос количества сообщений из javascript, причем 2 из них равны
{SetupId : 7, InstallationId : 1, ComponentTypeId: 5}
Я проверил это как с помощью fiddler, так и пошагово просматривая код на сервере.
Однако иногда ограничение, которое я выполняю выше, работает так, как должно, а в других случаях это не так.Я предполагаю, что поскольку Post является асинхронным действием, запрос № 2 иногда проверяет базу данных на наличие дубликатов ДО того, как первый запрос удалось сохранить в базе данных.
Как я могу решить эту проблему?Есть ли способ заблокировать операции EF в базе данных от начала действия post до конца?Это даже хорошая идея?
Однако у меня есть ограничения базы данных, так как это только когда компонент typetype равен 5, тогда я не уверен, как это реализовать.Или, если это вообще возможно.