エントリをデータベースに保存しようとしていますが、それに付随する (フォルダにアップロードされた) 画像ファイルがあります。画像ファイルのパスもデータベースに保存したいのですが、問題は、画像ファイル名が常に一意になるように、ファイル名にエントリの ID (PhotoId) を使用することです。PhotoIdがまだ生成されていないため、実際には機能しないこのコードがあり、保存された画像はすべて0.jpgのファイル名を持っています。
とにかくIDを確実に予測できるので、データベースエントリのファイル名フィールドに入れることができますか? それ以外の場合はキャッチ 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");