照片和数据库

时间:2009-06-25 11:36:46

标签: asp.net asp.net-mvc file upload

我正在一个网站上工作,用户可以上传他们想要宣传的产品的照片。 我正在将照片保存在网络上的文件夹中。在我保留照片参考的表格中,有一个关键字段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

3 个答案:

答案 0 :(得分:2)

第二种方法肯定更有效率;其他选项可能是在您的应用程序层中创建唯一(您可以使用guids),然后将其用作关键数据库记录并与文件名相同。

答案 1 :(得分:2)

如果您使用的是最新的SQL Server,则可能需要查看新的FILESTREAM字段类型:

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

正是出于这种情况 - 试图从表结构中获取大块blob并进入文件系统。

除此之外,我认为你有任何一种方式都有正确的想法 - 如果你需要两次保存,如果你关心如果第二次保存或SavePhoto失败会发生什么,你可能想要考虑交易。

答案 2 :(得分:0)

有几件事:

1)考虑将照片作为VARBINARY(MAX)存储在数据库中。就备份和恢复而言,人们可以更轻松地进行管理,并且更好地保证数据库的完整性。

2)考虑使用L2SQL Photo类的partial methods来实现您的目标。您应该能够更改Photo类的Update方法以保存照片。希望这会有所帮助。