2013-06-11 4 views
0

데이터베이스에 항목을 저장하려고하는데 폴더에 업로드 된 이미지 파일이 있습니다. 이미지 파일 경로가 데이터베이스에 저장되기를 원하지만, 문제는, 파일 이름이 항목의 ID (PhotoId)를 사용하여 이미지 파일 이름이 항상 고유하도록하는 것입니다. PhotoId가 아직 생성되지 않았기 때문에 실제로 작동하지 않는이 코드가 있으므로 저장된 이미지의 파일 이름은 모두 0.jpg입니다.삽입 이전에 테이블 항목 ID를 가져 오는 방법이 있습니까?

어쨌든 나는 이드를 예측할 수 있을까요? 그럼, 데이터베이스 항목의 파일 이름 필드에 넣을 수 있습니까? 그렇지 않으면 catch 22입니다.

  if (!Directory.Exists(Server.MapPath("~/App_Data/" + photo.ClientId))) 
      { 
       Directory.CreateDirectory(Server.MapPath("~/App_Data/") + photo.ClientId); 
      } 
      var FileExt = Path.GetExtension(photo.File.FileName); 
      var FilePath = Path.Combine(Server.MapPath("~/App_Data/" + photo.ClientId), photo.PhotoId.ToString()) + FileExt; 
      photo.File.SaveAs(FilePath); 
      var ThumbFilePath = Path.Combine(Server.MapPath("~/App_Data/" + photo.ClientId),photo.PhotoId.ToString() + "_thumbnail") + FileExt; 
      PhotoTools.MakeThumbnail(FilePath, ThumbFilePath, 0.15); 

      //Finally update database 
      photo.FilePath = FilePath; 
      db.Photos.Add(photo); 
      db.SaveChanges(); 
      return RedirectToAction("Create"); 

답변

2

일반적으로, 당신은 다음 파일 이름을 저장, ID를 얻을, 데이터베이스 레코드를 저장할 것입니다 추가합니다. 그리고 필요한 경우 경로로 레코드를 업데이트하십시오.

하지만 경로가 항상 동일하면 ID를 제외하고 왜 데이터베이스에 저장합니까?

+0

내 문제는 확장자가 다를 수 있다는 것이었지만 생각났습니다. 나는 단순히 데이터베이스에 항목을 저장하기 전에 알아낼 수있는 확장을 저장합니다. – RealityDysfunction

0

테이블 레코드 수를 선택하고 +1을 추가하십시오. 얻을 수 있습니다.

더 나은는 GUID 생성하거나 DateTime

+1

AutoIncrement ID가 사용되고 마지막 레코드 또는 레코드가 삭제 된 경우 "카운트"가 올바른 다음 ID를 예측하지 않도록주의하십시오. – Alexander

+0

두 명 이상의 사람이 사이트를 사용하고 있다면 안전하지 않습니다. 현대 시스템에서는 꽤 흔한 경향이 있습니다. –

관련 문제