I keep getting the following error when I am executing my HttpPost form a second time.
InvalidOperationException: A second operation started on this context before a previous operation completed.
Any instance members are not guaranteed to be thread safe.
My ApplicationDbContext is initialised in my controller as such:
public class AssetController : Controller
{
private readonly ApplicationDbContext _context;
public AssetController(
ApplicationDbContext context,)
{
_context = context;
}
And this is the function in the controller that handles the post and save:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Add(IFormFile file, AddAssetViewModel model)
{
if (ModelState.IsValid)
{
var currentUser = await _userManager.GetUserAsync(HttpContext.User);
var assetOwnership =
_context.AssetOwnership.SingleOrDefault(o => o.AssetOwnershipId == model.OwnershipId);
var origin = _context.Location.SingleOrDefault(l => l.LocationId == model.OriginId);
var currentLocation = _context.Location.SingleOrDefault(l => l.LocationId == model.CurrentLocationId);
var division = _context.Division.SingleOrDefault(d => d.DivisionId == model.DivisionId);
var normalAsset = model.NormalAsset == 2;
var uploadSavePath = Path.Combine(_hostingEnvironment.WebRootPath, "Uploads\\AssetPictures\\");
var trackingNumber = GetTrackingNumber(model.OwnershipId, model.DivisionId);
var asset = new Asset
{
TrackingNum = trackingNumber,
Owner = currentUser,
Ownership = assetOwnership,
CurrentLocation = currentLocation,
Origin = origin,
ModelName = model.ModelName,
SerialNum = model.SerialNum,
Division = division,
Desc = model.Desc,
HwOpt = model.HwOpt,
SwOpt = model.SwOpt,
Availability = model.Availability,
Remarks = model.Remarks,
ReadyToSell = model.ReadyToSell,
PurchaseDate = model.PurchaseDate,
PurchasePo = model.PurchasePo,
NormalAsset = normalAsset,
MaterialNumber = model.MaterialNum,
IsTagged = model.IsTagged,
PurchasePrice = model.PurchasePrice,
IsDamaged = model.IsDamaged,
LastCalDate = model.LastCalDate,
Firmware = model.Firmware,
EstimatedNextCalDate = model.EstimatedNextCalDate,
LicenceExpiry = model.LicenceExpiry
};
if (file != null)
{
var imageName = asset.TrackingNum + ".jpg";
if (file.Length > 0)
{
using (var fileStream =
new FileStream(Path.Combine(uploadSavePath, imageName), FileMode.Create))
{
await file.CopyToAsync(fileStream);
}
asset.AssetPicture = imageName;
}
}
_context.Asset.Add(asset);
await _context.SaveChangesAsync();
return RedirectToAction("Index");
}
return View(model);
}
}
When I am only submitting the form for the first time, everything goes fine, item is saved into the database properly. However, when I try to add a second item, I get the error. Can anybody help me to fix this? Error output is saying it fails at
Project.Controllers.AssetController+<Add>d__14.MoveNext() in AssetController.cs
+
await _context.SaveChangesAsync();
I finally fixed it. I forgot to make one of my helper method with async calls async and those calls await. So that messed up the whole thing.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With