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