我有一个图像上传功能,我可以同时拖放大量图像上传图像。这样可以正常工作,但问题是,如果图像是upploaded,则应该获得特定的ID,如果它是第一个上传的。
但是现在我正在检查是否有其他上传,然后如果没有我上传图像。这里的问题是,在下一个图像检查是否是第一个图像之前,第一个图像尚未保存。因此,最终将使用只有第一个应具有的ID上传所有图像。
是否有可能制作存储库方法,以便它只能被调用一个并且必须在下一个调用到达方法之前保存?
编辑:
foreach (string fileName in request.Files)
{
var companyName = request.Form.Get(0);
var productId = request.Form.Get(1);
if (string.IsNullOrWhiteSpace(companyName))
{
throw new Exception("No company found!");
}
if (string.IsNullOrWhiteSpace(productId))
{
throw new Exception("No product picked!");
}
HttpPostedFileBase file = request.Files[fileName];
if (file != null && file.ContentLength > 0)
{
//This is the method that calls the API
SaveUploadResource(file, companyName, productId);
}
}
这是存储库方法:
var productImage = pamContext.ProductResources.Where(w => w.ProductId == productId && w.CompanyName == companyName && w.LanguageCode == "en" && w.ResourceTypeId == "I");
if (!productImage.Any())
{
productResource.ResourceTypeId = "I";
}
pamContext.ProductResources.Add(productResource);
pamContext.SaveChanges();
答案 0 :(得分:1)
也许您可以使用Lock statement
private Object myLock= new Object();
foreach (string fileName in request.Files)
{
var companyName = request.Form.Get(0);
var productId = request.Form.Get(1);
if (string.IsNullOrWhiteSpace(companyName))
{
throw new Exception("No company found!");
}
if (string.IsNullOrWhiteSpace(productId))
{
throw new Exception("No product picked!");
}
HttpPostedFileBase file = request.Files[fileName];
if (file != null && file.ContentLength > 0)
{
lock (myLock)
{
//This is the method that calls the API
SaveUploadResource(file, companyName, productId);
}
}
}
锁定将基本上暂停任何顺序执行,直到前一个完成。注意确保您的方法相对于正在进行的调用次数而言运行时间不会太长,或者响应时间可能会累积并变得非常慢。