2009-06-25 8 views
2

Je travaille sur un site Web, où l'utilisateur peut télécharger des photos de produits qu'ils veulent faire de la publicité. Je sauvegarde des photos dans un dossier sur le Web. Dans la table où je garde la référence des photos, il y a un champ photo-clé qui est le champ Identité (clé primaire).Photos et Base de données

Mon référentiel a des méthodes suivantes

Photo photo = rep.NewPhoto(); 
photo.Title="Some Title"; 
rep.InsertPhoto(photo); 
rep.SaveAll(); 

rep.SavePhoto(photo,uploadedPhoto); 
rep.SaveAll(); 

J'utilise LINQ to SQL pour mon modèle de données. Maintenant, mon problème est, si je veux enregistrer mes fichiers avec un nom qui vient de photoid, je dois appeler la méthode rep.SaveAll() pour obtenir le nouveau photoid créé, puis enregistrez la photo avec le nouvel ID et puis je dois appeler la méthode SaveAll() pour le mettre à jour avec les changements Happend dans la méthode SavePhoto().

Autre option: j'enregistrer d'abord le fichier avec un certain nombre de fichiers aléatoires, puis enregistrer l'enregistrement photo en une seule étape.

Ceci est la deuxième approche. Sauvegarder des fichiers avec photoid a un bon point, les photos peuvent être facilement chargées en utilisant son identifiant.

Quelle est une bonne approche pour réaliser ce genre de fonctionnalité.

L'aide sera appréciée.

Vive Parminder

Répondre

2

La deuxième approche est nettement plus efficace; l'autre option pourrait être de créer un unique dans votre couche d'application (vous pouvez utiliser des guids) et ensuite l'utiliser comme enregistrement de clé DB et même comme nom de fichier.

0

Quelques choses:

1) Pensez stocker les photos sous forme VARBINARY (MAX) dans la base de données. Il sera beaucoup plus facile pour les gens de gérer les sauvegardes et les restaurations, et c'est mieux pour l'intégrité de votre base de données.

2) Envisagez d'utiliser le partial methods de votre classe L2SQL Photo afin de réaliser ce que vous voulez. Vous devriez être en mesure de changer la méthode de mise à jour de votre classe Photo pour enregistrer votre photo. J'espère que cela t'aides.

2

Si vous utilisez la dernière SQL Server, vous pouvez regarder dans le nouveau type de champ FILESTREAM:

http://technet.microsoft.com/en-us/library/bb933993.aspx

Il est exactement ce genre de chose - en essayant d'obtenir de grandes blobs sur la structure de la table et sur le système de fichiers. À part cela, je pense que vous avez la bonne idée de l'une ou l'autre façon - si vous avez besoin de deux sauvegardes, vous pouvez envisager une transaction si vous vous souciez de ce qui se passe si la seconde sauvegarde ou SavePhoto échoue.