2009-06-25 14 views
2

私は広告をしたい商品の写真をアップロードできるウェブサイトで働いています。 ウェブ上のフォルダに写真を保存しています。私が写真の参照を保持するテーブルには、アイデンティティフィールド(主キー)であるキーフィールドphotoidがあります。写真とデータベース

私のリポジトリには、メソッド

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

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

私は私のデータモデルのためのLINQ to SQLのを使用していますが、次ました。 私のファイルがphotoydからの名前で の名前を付けて保存したい場合、私はrep.SaveAll()を呼び出す必要があります メソッドは、新しい作成photoidを取得し、新しいIDで写真を保存する SaveAll()メソッドを呼び出して、SavePhoto()メソッドの変更を happendで再度更新する必要があります。

その他のオプションは、まずランダムなファイル番号でファイルを保存してから、一度に写真のレコードを保存します。

これは第2のアプローチです。

Photo photo = rep.NewPhoto(); 
photo.Title="Some Title"; 
string filename = rep.SavePhoto(uploadedPhoto); 
photo.FileName=filename; 
rep.InsertPhoto(photo); 
rep.SaveAll(); 

photoidでファイルを保存することは良い点が1つあります。写真はそのIDで簡単にロードできます。

この種の機能を実現するには、どのような方法が良いですか。

ヘルプは申し立てます。

乾杯 Parminder

答えて

2

第2のアプローチは、より効率的です。他の選択肢は、アプリケーション層でユニークなものを作成すること(GUIDを使用することができます)をキーDBレコードとして使用し、ファイル名と同じものにすることです。

0

物事のカップル:

1)データベースにVARBINARY(MAX)などの写真を保存することを検討してください。バックアップとリストアが行われる限り、人々が管理する方がはるかに簡単になり、データベースの整合性が向上します。

2)L2SQL Photoクラスのpartial methodsを使用して、必要なものを実現することを検討してください。 PhotoクラスのUpdateメソッドを変更して写真を保存することができるはずです。お役に立てれば。

2

最新のSQL Serverを使用している場合は、新しいFILESTREAMフィールド型に見たいと思うかもしれません:

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

それは事のちょうどこの種のだ - の外に大きなブロブを取得しようテーブル構造とファイルシステム上に存在します。

これ以外にも、あなたはどちらかの方法で適切なアイデアを持っていると思います.2回の保存が必要な場合は、2回目の保存またはSavePhotoが失敗した場合に何が起こるか気にすると、トランザクションを考慮する必要があります。