﻿using System;
using System.Data.Entity;
using System.Linq;
using System.Threading.Tasks;

namespace Labs.Dados.Repositorios.Base
{
    using Labs.Models.Entidades.Base;

    interface IRepositorioBase<TEntidade>
        where TEntidade : EntidadeBase
    {
        DbContext Contexto { get; set; }

        void Inserir(TEntidade objeto);
        void Atualizar(TEntidade objeto);
        TEntidade Selecionar(params Object[] chave);
        void Excluir(TEntidade objeto);
        void Excluir(Func<TEntidade, Boolean> predicado);
        IQueryable<TEntidade> Query();
        IQueryable<TEntidade> Query(Func<TEntidade, Boolean> predicado);
        Int32 Salvar();
        Task<Int32> SalvarAsync();
    }
}
