[实战]MVC5+EF6+MySql企业网盘实战(17)——思考2

写在前面

今天吃饭回来,突然有一个更好的想法,这里做一下记录。

系列文章

[EF]vs15+ef6+mysql code first方式

[实战]MVC5+EF6+MySql企业网盘实战(1)

[实战]MVC5+EF6+MySql企业网盘实战(2)——用户注册

[实战]MVC5+EF6+MySql企业网盘实战(3)——验证码

[实战]MVC5+EF6+MySql企业网盘实战(4)——上传头像

[Bootstrap]modal弹出框

[实战]MVC5+EF6+MySql企业网盘实战(5)——登录界面,头像等比例压缩

[实战]MVC5+EF6+MySql企业网盘实战(5)——页面模板

[实战]MVC5+EF6+MySql企业网盘实战(5)——ajax方式注册

[实战]MVC5+EF6+MySql企业网盘实战(6)——ajax方式登录

[实战]MVC5+EF6+MySql企业网盘实战(7)——文件上传

[实战]MVC5+EF6+MySql企业网盘实战(8)——文件下载、删除

[实战]MVC5+EF6+MySql企业网盘实战(9)——编辑文件名

[实战]MVC5+EF6+MySql企业网盘实战(10)——新建文件夹

[实战]MVC5+EF6+MySql企业网盘实战(11)——新建文件夹2

[实战]MVC5+EF6+MySql企业网盘实战(12)——新建文件夹和上传文件

[实战]MVC5+EF6+MySql企业网盘实战(13)——编辑文件夹

[实战]MVC5+EF6+MySql企业网盘实战(14)——逻辑重构

[实战]MVC5+EF6+MySql企业网盘实战(14)——思考

[实战]MVC5+EF6+MySql企业网盘实战(15)——逻辑重构2

[实战]MVC5+EF6+MySql企业网盘实战(16)——逻辑重构3

[实战]MVC5+EF6+MySql企业网盘实战(17)——思考2

思路

平时如果要获取电脑上的文件,大都会采用递归的方式,所以就想到这样一个表结构。如图:

id是文件或者文件夹的自增id,pid则是文件或者文件夹所在的文件夹的id,也就是父id。这样设计数据表的好处是,上传文件,创建文件夹,修改文件夹,只需要考虑当前对象就行,不需要再去考虑路径的问题。修改名称就做到只是修改名称就行,不再考虑修改文件夹的名称对找不到文件的问题了。

所以MyFile类如下:

   /// <summary>
    /// 我的文件信息
    /// </summary>
    public class MyFile
    {
        [Key]
        public int Id { set; get; }
        /// <summary>
        /// 
        /// </summary>
        [Display(Name = "名称")]
        [StringLength(1024)]
        public string Name { set; get; }
        /// <summary>
        /// 扩展名
        /// </summary>
        [Display(Name = "文件扩展名")]
        [StringLength(8)]
        public string FileExt { set; get; }
        /// <summary>
        /// 文件或者文件夹图标
        /// </summary>
        [Display(Name = "文件图标")]
        [StringLength(32)]
        public string FileIcon { set; get; }
        /// <summary>
        /// 文件大小
        /// </summary>
        [Display(Name = "文件大小")]
        public int FileSize { set; get; }
        /// <summary>
        /// 文件md5
        /// </summary>
        [Display(Name = "文件MD5")]
        [StringLength(32)]
        public string FileMd5 { set; get; }
        /// <summary>
        /// 文件修改时间
        /// </summary>
        [Display(Name = "文件修改时间")]
        public DateTime ModifyDt { set; get; }
        /// <summary>
        /// 文件上传时间
        /// </summary>
        [Display(Name = "文件上传时间")]
        public DateTime CreateDt { set; get; }
        /// <summary>
        /// 是否逻辑删除
        /// </summary>
        [Display(Name = "文件是否删除")]
        public bool IsDelete { set; get; }
        /// <summary>
        /// 所属用户
        /// </summary>
        [Display(Name = "文件所属")]
        public virtual UserInfo User { set; get; }
        /// <summary>
        /// 是否是文件夹
        /// </summary>
        public bool IsFolder { get; set; }
        /// <summary>
        /// 父id
        /// </summary>
        public int ParentId { set; get; }
    }

总结

这样的操作更方便,前段传参的时候,只需要将当前对象的id,pid传到服务端就行。修改文件夹更简单了。出现今天的问题,是在开始这个项目的时候,没有考虑太深入,就是想着想到哪儿就写到哪儿,没有从整体去想细节问题。导致现在,该来该去的。

原文地址:https://www.cnblogs.com/wolf-sun/p/4995754.html