Сохранение в базу данных только для того, чтобы получить идентификатор, является плохим хаком? - PullRequest
0 голосов
/ 24 апреля 2010

Надеюсь, название не слишком запутанное. Я пытаюсь создать папки с идентификаторами объектов linq-to-sql. На самом деле я должен создать папки, прежде чем я должен сохранить их. Я буду использовать их, чтобы сохранить загруженные пользователем файлы. Как видите, мне нужно создать папку с FileID, прежде чем я смогу сохранить ее там. Поэтому я просто сохраняю запись, которая будет отредактирована или, возможно, удалена

File newFile = new File();
...//add some values to fields so they don't throw rule violations
db.AddFile(newFile);
db.Save();
System.IO.Directory.CreateDirectory("..Uploads/"+newFile.FileId.ToString());

После этого мне придется отредактировать некоторые поля и снова сохранить. Конечно, пользователь может остановить загрузку, и мне придется удалить его. Я знаю, что могу написать хранимую процедуру для получения следующего доступного FileID, но некоторые другие загрузки, происходящие в то же время, получат тот же номер Поэтому они пишут в одном каталоге, а это то, чего я не хочу. Стоит ли продолжать с этим, будут ли проблемы? Вы можете придумать лучший способ?

1 Ответ

3 голосов
/ 24 апреля 2010

Ну ... одна вещь, которую вы можете сделать, это сгенерировать GUID и использовать его вместо имени вашей папки

string uniqueDirectory = System.Guid.NewGuid().ToString("N");
System.IO.Directory.CreateDirectory("..Uploads/"+uniqueDirectory );
//handle upload, save file, errors,  etc..
...
//now that the file is uploaded save to the database
File newFile = new File();
newFile.FolderName=uniqueDirectory;
db.AddFile(newFile);
db.Save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...