Мое приложение имеет поддерживающие модели, которые ссылаются на соответствующие им таблицы SQL.Один SBanInfos
имеет все данные о пользователе.Другой, SBanFileDetails
имеет все хранилища guid файла, соответствующего guid, и источник самого файла.
В режиме редактирования я могу удалять файлы по отдельности из папки файлов и из SBanFileDetails
одновременно вот так:
[HttpPost]
public JsonResult DeleteFile(string id)
{
if (String.IsNullOrEmpty(id))
{
Response.StatusCode = (int)HttpStatusCode.BadRequest;
return Json(new { Result = "Error" });
}
try
{
Guid guid = new Guid(id);
SBanFileDetail sBanFileDetail = db.SBanFileDetails.Find(guid);
if (sBanFileDetail == null)
{
Response.StatusCode = (int)HttpStatusCode.NotFound;
return Json(new { Result = "Error" });
}
//Remove from database
db.SBanFileDetails.Remove(sBanFileDetail);
db.SaveChanges();
//Delete file from the file system
var path = Path.Combine(Server.MapPath("~/pathto/myfile/"), sBanFileDetail.Id + sBanFileDetail.Extension);
if (System.IO.File.Exists(path))
{
System.IO.File.Delete(path);
}
return Json(new { Result = "OK" });
}
catch (Exception ex)
{
return Json(new { Result = "ERROR", Message = ex.Message });
}
}
И я по опыту знаю, что могу удалить все SBanFileDetails
, относящиеся к пользователю и записи пользователя, вот так:
SBanInfo sBanInfo = db.SBanInfos.Find(id);
db.SBanFileDetails
.Where(p => p.SubjectId == id)
.ToList()
.ForEach(p => db.SBanFileDetails.Remove(p));
db.SBanInfos.Remove(sBanInfo);
db.SaveChanges();
У меня вопрос, как удалить ссылки из базы данных и файлы из папки одновременно?