public void Salvar(Compra compra)
        {

            foreach (var compraItem in compra.Itens)
                _compraItemDomainService.ValidarProdutoExistente(compraItem);



            // Para usar BeginTransation teria que implementar uma padrão Unit of Work e deixar disponível aki
            // A Application, que deve gerenciar a Transation
            try
            {
                // BeginTransation
                _compraRepository.Add(compra);
                foreach (var compraItem in compra.Itens)
                    _compraItemRepository.Add(compraItem);
                // Commit
            }
            catch 
            {
                // RollBack
                throw;
            }
            
        }
 internal CompraItem(int idCompraItem, Compra compra, Produto produto, int quantidade, decimal preco)
 {
     this.IdCompraItem = idCompraItem;
     this.Compra = compra;
     this.Produto = produto;
     this.Quantidade = quantidade;
     this.Preco = preco;
 }
        public CompraItem(Compra compra, Produto produto, int quantidade, decimal preco)
        {
            if (compra == null)
                throw new ArgumentNullException("compra");

            this.Compra = compra;

            AlterarProduto(produto, quantidade, preco);
        }
        public static Compra OutCompra(CompraModel compraModel)
        {
            var compra = new Compra(new Fornecedor(compraModel.IdFornecedor));
            foreach (var compraItemModel in compraModel.Itens)
                compra.AdicionarItem(
                    CompraFactory.CreateItem(
                    compra,
                    new Produto(compraItemModel.IdProduto),
                    compraItemModel.Quantidade,
                    compraItemModel.Preco));

            return compra;
        }
        public static CompraItem CreateItem(IDataReader dataReader, Compra compra)
        {
            var compraItem = new CompraItem(
                (int)dataReader["IdCompraItem"],
                compra,
                new Produto((int)dataReader["IdProduto"]),
                (int)dataReader["Quantidade"],
                (decimal)dataReader["Preco"]);

            compra.AdicionarItem(compraItem);

            return compraItem;
        }
        public static CompraModel OutCompraModel(Compra compra)
        {
            var compraModel = new CompraModel
            {
                IdFornecedor = compra.Fornecedor.IdFornecedor,
                FornecedorNome = compra.Fornecedor.Nome,
                DataCadastro = compra.DataCadastro
            };

            foreach (var compraItem in compra.Itens)
                compraModel.Itens.Add(new CompraItemModel
                {
                    IdProduto = compraItem.Produto.IdProduto,
                    Preco = compraItem.Preco,
                    Quantidade = compraItem.Quantidade
                });

            return compraModel;
        }
 public CompraException(string mensagem, Compra compra)
     : base(mensagem) { this.Compra = compra; }
 public static CompraItem CreateItem(Compra compra, Produto produto, int quantidade, decimal preco)
 {
     return new CompraItem(compra, produto, quantidade, preco);
 }