public App Get(int id)
        {
            var db = new EE.DbAppContext();
            var a  = db.Apps.Include(t => t.Files).FirstOrDefault(t => t.Id == id);

            return(a);
        }
        public AppData Get(int id)
        {
            var     db = new EE.DbAppContext();
            AppData a  = new AppData();

            var ap = db.Apps.Include(t => t.Files).ThenInclude(r => r.Revisions).FirstOrDefault(t => t.Id == id);

            a.AppId   = ap.Id;
            a.AppName = ap.AppName;
            foreach (var apFile in ap.Files)
            {
                var fd = new AppData.FileData {
                    Id = apFile.Id, Nm = apFile.Name, Run = apFile.Run
                };
                var di  = new DirectoryInfo("FileDataFolder");
                var d   = Path.Combine(di.FullName, apFile.Id.ToString("D5"));
                var rr  = db.Revisions.ToList();
                int rev = apFile.Revisions.OrderByDescending(r => r.Rev).FirstOrDefault()?.Rev ?? 0;
                if (rev == 0)
                {
                    continue;
                }
                fd.Rev = rev;
                var fna = Path.Combine(d, rev + ".bin");
                fd.Md5 = Utils.Utils.ComputeMD5Checksum(System.IO.File.OpenRead(fna));
                a.Files.Add(fd);
            }

            return(a);
        }
        public IEnumerable <App> Get()
        {
            var db = new EE.DbAppContext();
            var t  = db.Apps.Include(x => x.Files);

            return(t);
        }
        public File Add(int aid, string nm, int run)
        {
            nm = nm.ToLower();
            var db = new EE.DbAppContext();
            var a  = db.Apps.Include(t => t.Files).FirstOrDefault(t => t.Id == aid);

            if (a == null)
            {
                return(null);
            }
            var f = a.Files.FirstOrDefault(t => t.Name == nm);

            if (f != null)
            {
                return(f);
            }
            f = new File()
            {
                Name = nm, Run = run == 1
            };
            db.Files.Add(f);
            a.Files.Add(f);
            db.SaveChanges();
            f = a.Files.FirstOrDefault(t => t.Name == nm);
            return(f);
        }
        public int Load(int aid, string fn)
        {
            var f   = Add(aid, fn);
            var fid = f.Id;
            var di  = new DirectoryInfo("FileDataFolder");
            var d   = Path.Combine(di.FullName, fid.ToString("D5"));

            Directory.CreateDirectory(d);
            var input = Request.BodyReader.AsStream();

            byte[] bb;
            using (MemoryStream ms = new MemoryStream())
            {
                input.CopyTo(ms);
                bb = ms.ToArray();
            }
            var db = new EE.DbAppContext();

            f = db.Files.Include(r => r.Revisions).FirstOrDefault(t => t.Id == fid);
            int rev = f?.Revisions.OrderByDescending(r => r.Rev).FirstOrDefault()?.Rev ?? 0;

            rev++;
            var fna = Path.Combine(d, rev + ".bin");

            System.IO.File.WriteAllBytes(fna, bb);
            f.Revisions.Add(new Revision()
            {
                Rev = rev
            });
            db.SaveChanges();
            return(-1);
        }
        public int SetRun(int fid, int rn)
        {
            var db = new EE.DbAppContext();
            var f  = db.Files.FirstOrDefault(t => t.Id == fid);

            if (f == null)
            {
                return(0);
            }
            f.Run = rn > 0;
            db.SaveChanges();
            return(1);
        }
        public int Add(string nm)
        {
            nm = nm.ToLower();
            var db = new EE.DbAppContext();
            var o  = db.Apps.FirstOrDefault(t => t.AppName == nm);

            if (o != null)
            {
                return(o.Id);
            }
            db.Apps.Add(new App()
            {
                AppName = nm
            });
            db.SaveChanges();
            o = db.Apps.FirstOrDefault(t => t.AppName == nm);
            if (o != null)
            {
                return(o.Id);
            }
            return(-1);
        }