2010-04-24 2 views
0

J'espère que le titre n'est pas trop confus. J'essaie de créer des dossiers avec des ID d'objets linq-to-sql. En fait, je dois créer des dossiers avant que je devrait les enregistrer. Je vais les utiliser pour conserver les fichiers téléchargés par l'utilisateur. Comme vous pouvez le voir, je dois créer le dossier avec le FileID avant de pouvoir l'enregistrer ici. Je viens donc de sauvegarder un enregistrement qui sera édité ou peut-être suppriméEst-ce que l'enregistrement dans la base de données est juste un mauvais hack?

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()); 

Après que je vais devoir modifier certains champs et enregistrer à nouveau. Bien sûr, l'utilisateur pourrait arrêter le téléchargement et je devrais le supprimer. Je sais que je peux écrire une procédure stockée pour obtenir le prochain FileID disponible mais un autre téléchargement se produisant en même temps obtiendrait le même nombre. Alors ils écriraient dans le même répertoire, ce que je ne veux pas. Devrais-je continuer avec cela, y aurait-il des problèmes? Pouvez-vous penser à un meilleur moyen?

+1

Si vous utilisez GUID au lieu d'ID d'auto-incrémentées, vous ne devez pas faire voyage dans la base de données en premier. –

Répondre

3

Eh bien .. une chose que vous pouvez faire est de générer un GUID, et l'utiliser pour le nom de votre dossier au lieu

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(); 
Questions connexes