<commit_before>﻿using CdZ.Dominio;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

namespace CdZ.Repositorio.EF
{
    /*
     * Criamos nosso repositório de pedidos aqui, implementando nossa
     * interface de regras de repositório de pedidos.
     */
    public class CavaleiroRepositorioEF : ICavaleiroRepositorio
    {
        public int Adicionar(Cavaleiro cavaleiro)
        {
            using (var db = new ContextoDeDados())
            {
                /*
                 * Para informarmos um INSERT, devemos setar o State como Added.
                 */
                db.Entry<Cavaleiro>(cavaleiro).State = EntityState.Added;
                db.SaveChanges();
                return cavaleiro.Id;
            }
        }

        public Cavaleiro Buscar(int id)
        {
            using (var db = new ContextoDeDados())
            {
                return db.Cavaleiro
                   .Include(_ => _.LocalNascimento)
                   .Include(_ => _.LocalTreinamento)
                   .Include(_ => _.Golpes)
                   .Include(_ => _.Imagens)
                   .SingleOrDefault(_ => _.Id == id);
            }
        }

        public IEnumerable<Cavaleiro> Todos()
        {
            using (var db = new ContextoDeDados())
            {
                //TODO: paginar
                return db.Cavaleiro
                    .Include(_ => _.LocalNascimento)
                    .Include(_ => _.LocalTreinamento)
                    .Include(_ => _.Golpes)
                    .Include(_ => _.Imagens)
                    .ToList();
            }
        }

        public void Excluir(int id)
        {
            using (var db = new ContextoDeDados())
            {
                /*
                 * Para realizar um DELETE no banco de dados,
                 * infelizmente precisamos buscar o objeto no banco para então
                 * removê-lo.
                 */
                var cavaleiroASerExcluido = db.Cavaleiro.Find(id);
                var localNascimento = db.Cavaleiro.Include(_ => _.LocalNascimento).Single(_ => _.Id == id).LocalNascimento;
                var localTreinamento = db.Cavaleiro.Include(_ => _.LocalTreinamento).Single(_ => _.Id == id).LocalTreinamento;
                // devido à FK partindo de cavaleiro para local primeiro removemos cavaleiro
                db.Cavaleiro.Remove(cavaleiroASerExcluido);
                db.Local.Remove(localNascimento);<commit_msg>refactor(CavaleiroRepositorioEF): Listar cavaleiros ordenando por nome.<commit_after>﻿using CdZ.Dominio;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;

namespace CdZ.Repositorio.EF
{
    /*
     * Criamos nosso repositório de pedidos aqui, implementando nossa
     * interface de regras de repositório de pedidos.
     */
    public class CavaleiroRepositorioEF : ICavaleiroRepositorio
    {
        public int Adicionar(Cavaleiro cavaleiro)
        {
            using (var db = new ContextoDeDados())
            {
                /*
                 * Para informarmos um INSERT, devemos setar o State como Added.
                 */
                db.Entry<Cavaleiro>(cavaleiro).State = EntityState.Added;
                db.SaveChanges();
                return cavaleiro.Id;
            }
        }

        public Cavaleiro Buscar(int id)
        {
            using (var db = new ContextoDeDados())
            {
                return db.Cavaleiro
                   .Include(_ => _.LocalNascimento)
                   .Include(_ => _.LocalTreinamento)
                   .Include(_ => _.Golpes)
                   .Include(_ => _.Imagens)
                   .SingleOrDefault(_ => _.Id == id);
            }
        }

        public IEnumerable<Cavaleiro> Todos()
        {
            using (var db = new ContextoDeDados())
            {
                //TODO: paginar
                return db.Cavaleiro
                    .Include(_ => _.LocalNascimento)
                    .Include(_ => _.LocalTreinamento)
                    .Include(_ => _.Golpes)
                    .Include(_ => _.Imagens)
                    .OrderBy(c => c.Nome)
                    .ToList();
            }
        }

        public void Excluir(int id)
        {
            using (var db = new ContextoDeDados())
            {
                /*
                 * Para realizar um DELETE no banco de dados,
                 * infelizmente precisamos buscar o objeto no banco para então
                 * removê-lo.
                 */
                var cavaleiroASerExcluido = db.Cavaleiro.Find(id);
                var localNascimento = db.Cavaleiro.Include(_ => _.LocalNascimento).Single(_ => _.Id == id).LocalNascimento;
                var localTreinamento = db.Cavaleiro.Include(_ => _.LocalTreinamento).Single(_ => _.Id == id).LocalTreinamento;
                // devido à FK partindo de cavaleiro para local primeiro removemos cavaleiro
                db.Cavaleiro.Remove(cavaleiroASerExcluido);
                db.Local.Remove(localNascimento);
{'fraction_non_alphanumeric': 0.08990536277602523, 'fraction_numerical': 0.0, 'mean_word_length': 1.3974480151228734, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 34, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4743284', 'n_tokens_mistral': 1484, 'n_tokens_neox': 1396, 'n_words': 308}