任何人都可以告诉我这是否可行。
我有一些允许用户上传/更改图像的代码,在更改发生之前我会在上传新图像之前从磁盘中删除默认/旧图像。
问题是如果删除或上传出现问题,我如何回滚两者以便返回原始图像。
我以为我可以使用tranactionscope,但要么我没有正确使用它,要么就不适用于这种情况。
我发现的所有示例都涉及使用2次调用数据库,但我的代码只涉及一次调用而且需要更新。
//TODO check transactionscope works ok
using (var tran = new TransactionScope())
{
//Delete old image before updating new image
//123 bogus number to throw error
var deleteOldImage = _igmpfu.DisplayProfileDetailsForUpdate("123")
.FirstOrDefault();
if (Convert.ToString(deleteOldImage) !=
"5bb188f0-2508-4cbd-b83d-9a5fe5914a1b.png")
{
DeleteOldImage(deleteOldImage);
}
//Insert new image
var imageGuid = imageId + ".png";
bool imageUrl = _iuma.UpdateAvatar(cookieId, imageGuid);
if (imageUrl)
{
TempData["Message"] = "Image updated";
return RedirectToAction("Index", "Members");
}
tran.Complete();
}
任何帮助新手的帮助都会受到赞赏
// ------------------------
我一直在看电脑,我所要做的只是
var deleteOldImage = _igmpfu.DisplayProfileDetailsForUpdate("123").FirstOrDefault();
if (deleteOldImage != null)
{
code here for writing to disk
}
我花了很多时间尝试解决这个问题,而这就是我必须做的事情: - (
感谢大家的回复。
答案 0 :(得分:0)
只有当您使用的课程知道如何在交易中登记时,您所拥有的代码才有效。
处理文件时遇到的主要问题是文件系统很难以事务方式处理。我将使用的方法是: