2009-06-25 68 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失败时会发生什么。