void ExecuteBulkInsert(List <MaestroProduct> plist)
        {
            UnitTypeManager um = new UnitTypeManager(context);
            MaestroUnitType unknownUnitType = um.GetUnknownItem();

            List <MaestroProduct> updatedProducts = new List <MaestroProduct>();

            foreach (MaestroProduct product in plist)
            {
                MaestroProduct existing = ProductCache.Instance.GetByQbId(product.QuickBooksProductId);
                if (existing != null)
                {
                    product.Id           = existing.Id;
                    product.UnitType     = existing.UnitType;
                    product.ProductGroup = existing.ProductGroup;
                    pm.Update(product);
                    updatedProducts.Add(existing);
                }
                else
                {
                    product.UnitType = unknownUnitType;
                }
            }

            List <ITransactionEntity> clist = plist.Where(q => !updatedProducts.Select(u => u.QuickBooksProductId).Contains(q.QuickBooksProductId)).Cast <ITransactionEntity>().ToList();

            if (clist.Count > 0)
            {
                pm.BulkInsert(clist);
            }

            if (updatedProducts.Count > 0)
            {
                updatedProducts.ForEach(p => pm.Update(p));
            }

            if (clist.Count > 0 || updatedProducts.Count > 0)
            {
                ProductCache.Instance.Reload(true);
            }
        }