2009-06-25 8 views
2

Ich arbeite an einer Website, wo Benutzer Fotos von Produkten hochladen können, die sie werben möchten. Ich speichere Fotos in einem Ordner im Internet. In der Tabelle, in der ich Referenzen von Fotos behalte, gibt es ein Schlüsselfeld photoid, das Identitätsfeld (Primärschlüssel) ist.Fotos und Datenbank

Mein Repository hat folgende Methoden

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

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

ich Linq verwende für meine Datenmodell in SQL. Jetzt ist mein Problem, wenn ich meine Dateien mit einem Namen speichern möchte, der von Photoid kommt, muss ich die rep.SaveAll() Methode aufrufen, um die neu erstellte Photoid zu erhalten und dann das Foto mit der neuen ID zu speichern und dann muss ich die SaveAll() Methode aufrufen, um sie erneut mit den Änderungen in der SavePhoto() Methode zu aktualisieren.

Andere Option ist, ich speichere die Datei mit einigen zufälligen Dateinummer zuerst und dann speichern Sie den Foto-Datensatz in einem Schritt.

Dies ist ein zweiter Ansatz.

Speichern von Dateien mit Photoid hat einen guten Punkt, Fotos können leicht mit seiner ID geladen werden.

Was ist ein guter Ansatz, um diese Art von Funktionalität zu erreichen.

Hilfe wird nützlich sein.

Prost Parminder

Antwort

2

Der zweite Ansatz ist definitiv effizienter; Eine andere Option könnte darin bestehen, in Ihrer Anwendungsebene eine eindeutige Ebene zu erstellen (Sie können GUIDs verwenden) und diese dann als Schlüssel-DB-Datensatz und als Dateinamen zu verwenden.

0

Ein paar Dinge:

1) Betrachten Sie die Fotos als VARBINARY (MAX) in der Datenbank zu speichern. Es wird viel einfacher für Benutzer sein, so weit wie Backups und Wiederherstellungen gehen, und es ist besser für die Integrität Ihrer Datenbank.

2) Erwägen Sie die Verwendung der partial methods Ihrer L2SQL Photo-Klasse, um zu erreichen, was Sie wollen. Sie sollten in der Lage sein, die Update-Methode Ihrer Fotoklasse zu ändern, um auch Ihr Foto zu speichern. Hoffe das hilft.

2

Wenn Sie den neuesten SQL Server verwenden, könnten Sie in den neuen FILESTREAM Feldtyp aussehen wollen:

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

Es ist für genau diese Art der Sache - das Ausprobieren großes Blobs bekommen von die Tabellenstruktur und auf das Dateisystem.

Abgesehen davon denke ich, dass Sie die richtige Idee haben, egal wie Sie gehen - wenn Sie zwei Speichervorgänge benötigen, sollten Sie eine Transaktion in Betracht ziehen, wenn Sie nicht wissen, was passiert, wenn der zweite Speichervorgang oder SavePhoto fehlschlägt.