Having trouble with a SaveChanges call that is timing out after I have performed some basic add operations the last being adding a record to a bridging table. I am unsure why this is happening. Could anyone provide some tips and advice?
I am using ASP.NET Core with EF Core as an ORM for a MSSQL Server database.
Here is the code in question.
Edit: Made changes to code based on suggestions in comments.
Edit 2: Appologies I forgot to mention I am using .NET Core 2.2 and EF Core 2.2.6
public AddToQueueResponse AddToQueue(AddToQueueRequest request)
{
AddToQueueResponse response = new AddToQueueResponse();
response = (AddToQueueResponse)request.CheckValidation(response);
if (response.Status == HttpStatusCode.BadRequest)
return response;
var nickname = new Nicknames()
{
Sid = request.SID,
NickName = request.Nickname
};
var item = new Queueitem()
{
Description = request.Description,
TimeAdded = DateTime.Now,
TopicId = request.TopicID
};
if (request.CheckInID.HasValue)
{
var checkIn = _checkInDataLayer.GetCheckIn(request.CheckInID.Value);
if (checkIn == null)
{
response.Status = HttpStatusCode.NotFound;
response.StatusMessages.Add(new StatusMessage(HttpStatusCode.NotFound, "Check in not in database."));
return response;
}
}
using (IDbContextTransaction trans = _queueDataLayer.GetTransaction())
{
try
{
if (!request.StudentID.HasValue)
{
_studentDataLayer.AddStudentNickname(nickname);
_studentDataLayer.Save();
if (nickname.StudentId == 0)
{
throw new Exception("Unable to add student nickname");
}
request.StudentID = nickname.StudentId;
}
item.StudentId = request.StudentID.Value;
_queueDataLayer.AddToQueue(item);
_queueDataLayer.Save();
if (request.CheckInID.HasValue)
{
Checkinqueueitem checkinqueueitem = new Checkinqueueitem()
{
CheckInId = request.CheckInID.Value,
QueueItemId = item.ItemId
};
_checkInDataLayer.AddCheckinQueueItem(checkinqueueitem);
_checkInDataLayer.Save();
}
response.ItemId = item.ItemId;
response.Status = HttpStatusCode.OK;
trans.Commit();
}
catch (Exception ex)
{
trans.Rollback();
s_logger.Error(ex, "Unable to add queue item");
response.Status = HttpStatusCode.InternalServerError;
response.StatusMessages.Add(new StatusMessage(HttpStatusCode.InternalServerError, "Unable to add queue item"));
}
}
return response;
}