2013-06-11 2 views
0

Я пытаюсь сохранить запись в базу данных, и есть файл изображения, который вместе с ним (загружен в папку). Я хочу, чтобы путь к файлу изображения также сохранялся в базе данных, но проблема в том, что я хочу, чтобы имя файла использовало идентификатор записи (PhotoId), чтобы гарантировать, что имя файла изображения всегда будет уникальным. У меня есть этот код, который на самом деле не работает, потому что PhotoId еще не создан, и поэтому сохраненные изображения имеют имена файлов 0.jpg.Есть ли способ получить идентификатор таблицы перед вставкой?

Есть ли в любом случае я могу точно предсказать идентификатор, поэтому я могу поместить его в поле имени файла базы данных? В противном случае это уловка.

  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

Как правило, вы бы сохранить запись в базе данных, получить идентификатор, а затем сохранить имя файла. И если нужно, обновите запись по пути.

Но если путь всегда один и тот же, за исключением идентификатора, зачем его сохранять в базе данных?

+0

Моя проблема заключалась в том, что расширение может меняться, но я думаю, что понял это; Я просто сохраню расширение, которое я могу выяснить, прежде чем хранить запись в базу данных. – RealityDysfunction

0

Выберите количество записей в таблице и добавьте +1 к этому значению. Вы можете получить.

Лучше генерировать GUID или Добавить DateTime

+1

Осторожно, если используется идентификатор автоинкремента, а последняя запись или любая запись удалена, «счетчик» не будет прогнозировать правильный следующий идентификатор. – Alexander

+0

Также небезопасно, если, знаете, более одного человека использует сайт. Это, как правило, довольно распространено для современных систем. –