保存到数据库只是为了让ID成为一个坏的黑客?

时间:2010-04-24 05:15:12

标签: c# linq linq-to-sql coding-style linq-to-entities

我希望标题不会太混乱。我正在尝试使用linq-to-sql对象的ID创建文件夹。实际上我必须在 保存之前创建文件夹。我将使用它们来保存用户上传的文件。正如您所看到的,我必须先创建具有FileID的文件夹,然后才能将其保存在那里。所以我只保存一条将被编辑或可能被删除的记录

File newFile = new File();
...//add some values to fields so they don't throw rule violations
db.AddFile(newFile);
db.Save();
System.IO.Directory.CreateDirectory("..Uploads/"+newFile.FileId.ToString());

之后,我将不得不编辑一些字段并再次保存。当然用户可能会停止上传,我将不得不删除它。我知道我可以编写一个存储过程来获取下一个可用的FileID,但同时发生的其他一些上传将得到相同的数字。所以他们会写在同一个目录中,这是我不想要的东西。我应该继续这样做,会有一些问题吗?你能想到一个更好的方法吗?

1 个答案:

答案 0 :(得分:3)

嗯..您可以做的一件事就是生成一个GUID,并将其用于您的文件夹名称

string uniqueDirectory = System.Guid.NewGuid().ToString("N");
System.IO.Directory.CreateDirectory("..Uploads/"+uniqueDirectory );
//handle upload, save file, errors,  etc..
...
//now that the file is uploaded save to the database
File newFile = new File();
newFile.FolderName=uniqueDirectory;
db.AddFile(newFile);
db.Save();