Exemplo n.º 1
0
        public OptimizationDb UpdateOptimizations(IList <DbOptimization> newOptimizations, IList <DbOptimization> oldOptimizations)
        {
            var setNew  = new HashSet <long>(newOptimizations.Select(opt => opt.Id ?? 0));
            var dictOld = new Dictionary <OptimizationKey, DbOptimization>();

            foreach (var opt in oldOptimizations)
            {
                if (!dictOld.ContainsKey(opt.Key))
                {
                    dictOld.Add(opt.Key, opt);
                }
            }

            using (var session = OpenWriteSession())
                using (var transaction = session.BeginTransaction())
                {
                    // Remove optimizations that are no longer in the list
                    foreach (var optimization in oldOptimizations)
                    {
                        if (!optimization.Id.HasValue)
                        {
                            continue;
                        }

                        if (!setNew.Contains(optimization.Id.Value))
                        {
                            session.Delete(optimization);
                        }
                    }

                    // Add or update optimizations that have changed from the old list
                    foreach (var optimization in newOptimizations)
                    {
                        DbOptimization optimizationOld;
                        if (dictOld.TryGetValue(optimization.Key, out optimizationOld) &&
                            Equals(optimization, optimizationOld))
                        {
                            continue;
                        }

                        // Create a new instance, because not doing this causes a BindingSource leak
                        var optimizationNewDisconnected = new DbOptimization(optimization);
                        session.SaveOrUpdate(optimizationNewDisconnected);
                    }

                    transaction.Commit();
                }

            return(ChangeProp(ImClone(this), im => im.LoadOptimizations(newOptimizations)));
        }
Exemplo n.º 2
0
        public OptimizationDb UpdateOptimizations(IList<DbOptimization> newOptimizations, IList<DbOptimization> oldOptimizations)
        {
            var setNew = new HashSet<long>(newOptimizations.Select(opt => opt.Id.HasValue ? opt.Id.Value : 0));
            var dictOld = oldOptimizations.ToDictionary(opt => opt.Key);

            using (var session = OpenWriteSession())
            using (var transaction = session.BeginTransaction())
            {
                // Remove optimizations that are no longer in the list
                foreach (var optimization in oldOptimizations)
                {
                    if (!optimization.Id.HasValue)
                        continue;

                    if (!setNew.Contains(optimization.Id.Value))
                        session.Delete(optimization);
                }

                // Add or update optimizations that have changed from the old list
                foreach (var optimization in newOptimizations)
                {
                    DbOptimization optimizationOld;
                    if (dictOld.TryGetValue(optimization.Key, out optimizationOld) &&
                            Equals(optimization, optimizationOld))
                        continue;

                    // Create a new instance, because not doing this causes a BindingSource leak
                    var optimizationNewDisconnected = new DbOptimization(optimization);
                    session.SaveOrUpdate(optimizationNewDisconnected);
                }

                transaction.Commit();
            }

            return ChangeProp(ImClone(this), im => im.LoadOptimizations(newOptimizations));
        }
Exemplo n.º 3
0
 public DbOptimization(DbOptimization other)
     : this(other.Key, other.Value)
 {
     Id = other.Id;
 }
Exemplo n.º 4
0
 public DbOptimization(DbOptimization other)
     : this(other.Key, other.Value)
 {
     Id = other.Id;
 }