2009-06-25 77 views
2

我在一個網站上工作,用戶可以上傳他們想要宣傳的產品的照片。 我將照片保存在網絡上的文件夾中。在我持續參考照片的表格中,有一個關鍵字段photoid,它是Identity字段(主鍵)。照片和數據庫

我的倉庫有以下方法

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

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

我使用LINQ to SQL中我的數據模型。 現在我的問題是,如果我想保存我的文件 與來自photoid的名稱,我必須調用rep.SaveAll() 方法來獲取新創建的photoid,然後用新ID保存照片 然後我必須調用SaveAll()方法來更新它,並在SavePhoto()方法中發生變化 。

其他選項是我用一些隨機文件編號保存文件,然後在一步保存照片記錄。

這是第二種方法。

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

用photoid保存文件有一個好處,照片可以很容易地使用它的ID加載。

什麼是實現這種功能的好方法。

幫助將得到認可。

乾杯 成員Parminder

回答

2

第二種方法肯定更有效;其他選項可能是在您的應用程序層創建一個唯一的(您可以使用guid),然後將其用作關鍵數據庫記錄並與文件名相同。

0

幾件事情:

1)考慮在數據庫中存儲的照片作爲VARBINARY(MAX)。就備份和恢復而言,人們可以更容易地進行管理,這對數據庫的完整性會更好。

2)考慮使用您的L2SQL Photo類的partial methods以達到您想要的效果。你應該可以改變你的Photo類的Update方法來保存你的照片。希望這可以幫助。

2

如果您使用的是最新的SQL Server,你可能想尋找到新的FILESTREAM字段類型:

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

它是正是這種東西 - 試圖讓大斑點出來的表結構和文件系統上。

除此之外,我認爲你有任何想法 - 如果你需要兩次保存,你可能想考慮一個事務,如果你關心第二次保存或SavePhoto失敗時會發生什麼。