Esempio n. 1
0
 public bool Delete <TEntity>(List <TEntity> entities) where TEntity : class
 {
     try
     {
         _dataContext.RemoveRange(entities.AsEnumerable());
         return(true);
     }
     catch (Exception)
     {
         return(false);
     }
 }
        public IndexResult BuildIndex()
        {
            var specs = RetrieveSpecs();

            // todo: semantic versioning & version comparison (write that version class!)
            // todo: use semantic versioning to compare different versions of same package, and set islatest... properties.

            var added   = new List <Nuspec>();
            var updated = new List <Nuspec>();

            foreach (var spec in specs)
            {
                db.Database.EnsureCreated();
                var package = db.Packages.FirstOrDefault(p => p.Identifier == spec.Metadata.Id && p.Version == spec.Metadata.Version);
                if (package == null)
                {
                    added.Add(spec);
                    AddNewPackage(spec);
                }
                else
                {
                    updated.Add(spec);
                    UpdatePackage(package, spec);
                }
            }

            var remainingKeys = added.Union(updated).Select(spec => $"{spec.Metadata.Id}:{spec.Metadata.Version}").ToArray();

            var deletedPackages = db.Packages.Select(p => new { Package = p, Key = $"{p.Identifier}:{p.Version}" }).Where(p => !remainingKeys.Contains(p.Key)).Select(p => p.Package).ToList();

            var deleted = deletedPackages.Select(dp => $"{dp.Identifier}:{dp.Version}").ToArray();

            db.RemoveRange(deletedPackages);

            db.SaveChanges();
            return(new IndexResult
            {
                Added = added.Select(p => $"{p.Metadata.Id}:{p.Metadata.Version}").ToArray(),
                Updated = updated.Select(p => $"{p.Metadata.Id}:{p.Metadata.Version}").ToArray(),
                Deleted = deleted
            });
        }