写在前面
今天吃饭回来,突然有一个更好的想法,这里做一下记录。
系列文章
[实战]MVC5+EF6+MySql企业网盘实战(17)——思考2
思路
平时如果要获取电脑上的文件,大都会采用递归的方式,所以就想到这样一个表结构。如图:
id是文件或者文件夹的自增id,pid则是文件或者文件夹所在的文件夹的id,也就是父id。这样设计数据表的好处是,上传文件,创建文件夹,修改文件夹,只需要考虑当前对象就行,不需要再去考虑路径的问题。修改名称就做到只是修改名称就行,不再考虑修改文件夹的名称对找不到文件的问题了。
所以MyFile类如下:
////// 我的文件信息 /// public class MyFile { [Key] public int Id { set; get; } ////// /// [Display(Name = "名称")] [StringLength(1024)] public string Name { set; get; } ////// 扩展名 /// [Display(Name = "文件扩展名")] [StringLength(8)] public string FileExt { set; get; } ////// 文件或者文件夹图标 /// [Display(Name = "文件图标")] [StringLength(32)] public string FileIcon { set; get; } ////// 文件大小 /// [Display(Name = "文件大小")] public int FileSize { set; get; } ////// 文件md5 /// [Display(Name = "文件MD5")] [StringLength(32)] public string FileMd5 { set; get; } ////// 文件修改时间 /// [Display(Name = "文件修改时间")] public DateTime ModifyDt { set; get; } ////// 文件上传时间 /// [Display(Name = "文件上传时间")] public DateTime CreateDt { set; get; } ////// 是否逻辑删除 /// [Display(Name = "文件是否删除")] public bool IsDelete { set; get; } ////// 所属用户 /// [Display(Name = "文件所属")] public virtual UserInfo User { set; get; } ////// 是否是文件夹 /// public bool IsFolder { get; set; } ////// 父id /// public int ParentId { set; get; } }
总结
这样的操作更方便,前段传参的时候,只需要将当前对象的id,pid传到服务端就行。修改文件夹更简单了。出现今天的问题,是在开始这个项目的时候,没有考虑太深入,就是想着想到哪儿就写到哪儿,没有从整体去想细节问题。导致现在,该来该去的。