예제 #1
0
        /// <summary>
        /// Recebe um objeto item a ser alterado e suas respectivas relações com coleções
        /// </summary>
        /// <param name="itemAlterado">Objeto item a ser alterado</param>
        /// <returns></returns>
        public int Alterar(Item itemAlterado)
        {
            if (itemAlterado != null && !string.IsNullOrEmpty(itemAlterado.Nome.Trim()))
            {
                try
                {
                    using (ColecionadorEntities contexto = new ColecionadorEntities(Util.ConnectionString))
                    {
                        //Recupera o item atual que está armazenado no BD
                        Item itemAtual = contexto.Item.Find(itemAlterado.Codigo);
                        //Alteração dos dados que estão relacionados especificamente ao item
                        itemAtual.Nome = itemAlterado.Nome;
                        itemAtual.Descricao = itemAlterado.Descricao;
                        //...

                        //Consulta Linq para obter as coleções que devem ser excluídas do item atual
                        var colecoesDeletadas = (from c in itemAtual.Colecoes
                                                 where !(from c1 in itemAlterado.Colecoes
                                                         select c1.Codigo).Contains(c.Codigo)
                                                 select c).ToList();

                        //Consulta Linq para obter as coleções que devem ser adicionadas ao item atual
                        var colecoesAdicionadas = (from c in itemAlterado.Colecoes
                                                   where !(from c1 in itemAtual.Colecoes
                                                           select c1.Codigo).Contains(c.Codigo)
                                                   select c).ToList();

                        //Exclusão das coleções relacionados ao item atual
                        colecoesDeletadas.ForEach(c => itemAtual.Colecoes.Remove(c));

                        //Adição das novas coleções relacionadas ao item atual
                        foreach (Colecao c in colecoesAdicionadas)
                        {
                            //Como os objetos Colecao vieram de outro contexto é necessário verificar se os mesmos já foram "Attachados" a esse
                            if (contexto.Entry(c).State == System.Data.EntityState.Detached)
                                contexto.Colecao.Attach(c);
                            itemAtual.Colecoes.Add(c);
                        }

                        //Confirmação dos dados no BD
                        return contexto.SaveChanges();
                    }
                }
                catch
                {
                    return -2;
                }
            }
            else
                return -1;
        }
예제 #2
0
 /// <summary>
 /// Recebe o código da Colecao e devolve o objeto com todas as informações sobre a mesma
 /// </summary>
 /// <param name="codigoColecao">Código da Colecao que se deseja obter</param>
 /// <returns></returns>
 public Colecao ObterColecao(int codigoColecao)
 {
     if (codigoColecao > 0)
     {
         using (var contexto = new ColecionadorEntities(Util.ConnectionString))
         {
             return (from c in contexto.Colecao
                     where c.Codigo == codigoColecao
                     select c).FirstOrDefault();
         }
     }
     else
         return null;
 }
예제 #3
0
        /// <summary>
        /// Recebe o código do item a ser excluído e exclui o objeto item e suas respectivas relações no BD
        /// </summary>
        /// <param name="codigoItem">Código do item a ser excluído</param>
        /// <returns></returns>
        public int Excluir(int codigoItem)
        {
            try
            {
                using (ColecionadorEntities contexto = new ColecionadorEntities(Util.ConnectionString))
                {
                    Item item = contexto.Item.Find(codigoItem);

                    List<Colecao> colecoes = item.Colecoes.ToList();

                    colecoes.ForEach(c => item.Colecoes.Remove(c));

                    contexto.Item.Remove(item);
                    return contexto.SaveChanges();
                }
            }
            catch
            {
                return -1;
            }
        }
예제 #4
0
        /// <summary>
        /// Recebe o código de um item e devolve um objeto completo sobre o mesmo
        /// </summary>
        /// <param name="codigoItem">Código do item a ser recuperado</param>
        /// <returns></returns>
        public Item Obter(int codigoItem)
        {
            if (codigoItem > 0)
            {
                using (var contexto = new ColecionadorEntities(Util.ConnectionString))
                {
                    /* Utilizado para que os objetos Colecao sejam incluídos ao objeto item
                     * no momento em que ele for retornado. Isso é necessário pois deixaremos o contexto
                     * onde o mesmo foi criado e portando deixaremos de ter a referencia da conexão
                     * para realizar o Lazy-Loading (acesso aos dados relacionados após a leitura inicial do objeto pai)
                     */
                      contexto.Item.Include("Colecoes").ToList();

                    Item i = contexto.Item.Find(codigoItem);
                    return i;
                }
            }
            else
                return null;
        }
예제 #5
0
 /// <summary>
 /// Recebe um objeto item e suas respectivas coleções e o armazena no banco de dados
 /// </summary>
 /// <param name="novoItem">Objeto item</param>
 /// <returns></returns>
 public int Gravar(Item novoItem)
 {
     if (novoItem != null && !string.IsNullOrEmpty(novoItem.Nome.Trim()))
     {
         try
         {
             using (ColecionadorEntities contexto = new ColecionadorEntities(Util.ConnectionString))
             {
                 /* É necessário fazer esse foreach para o EF entender que as coleções
                  * associadas já fazem parte dos dados existentes do BD/Modelo Conceitual,
                  * sendo assim, ele não precisará fazer o insert nas coleções também.
                  */
                 foreach (Colecao c in novoItem.Colecoes)
                     contexto.Colecao.Attach(c);
                 contexto.Item.Add(novoItem);
                 return contexto.SaveChanges();
             }
         }
         catch
         {
             return -2;
         }
     }
     else
         return -1;
 }