public bool Save(Produtos p)
        {
            try
            {
                db.Begin(System.Data.IsolationLevel.ReadUncommitted);

                if (!Valid(p))
                {
                    return(false);
                }

                if (db.Find(p.Id) == null)
                {
                    if (!string.IsNullOrWhiteSpace(p.Referencia))
                    {
                        if (db.Where(e => e.Referencia.Equals(p.Referencia)).FirstOrDefault() != null)
                        {
                            BStatus.Alert($"Já existe um produto com a referência '{p.Referencia}'");
                            return(false);
                        }
                    }

                    p.Id = db.NextId(e => e.Id);
                    db.Save(p);

                    Estoque est = new Estoque();
                    est.Produto_id   = p.Id;
                    est.Loja_id      = UsuariosController.LojaAtual.Id;
                    est.Data_entrada = DateTime.Now;
                    est.Quant        = 0;
                    est.Lote         = string.Empty;
                    est.Sublote      = string.Empty;

                    EstoqueController ec = new EstoqueController();
                    ec.SetContext(db.Context);
                    ec.Save(est);
                }
                else
                {
                    db.Update(p);
                }

                db.Commit();
                BStatus.Success("Produto salvo");
                return(true);
            }
            catch (Exception ex)
            {
                db.RollBack();
                return(false);
            }
        }