Pular para o conteúdo principal

Metodo Find() no Entity Framework Core 1.0

Olá,

Então você estava criando seu projeto com ORM Entity Framework Core 1.0 e no momento de  implementar a busca por id como de costume, você tentou utilizar o conhecido método find() e ele não existe nesta versão do framework...
Bem, sem problemas. Existe uma forma de você mesmo criar um helper para implementar esta busca. Você pode criar uma classe statica como abaixo :D


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
public static class Extensions
    {
        public static TEntity Find<TEntity>(this DbSet<TEntity> set, params object[] keyValues) where TEntity : class
        {
            var context = ((IInfrastructure<IServiceProvider>)set).GetService<DbContext>();

            var entityType = context.Model.FindEntityType(typeof(TEntity));
            var key = entityType.FindPrimaryKey();

            var entries = context.ChangeTracker.Entries<TEntity>();

            var i = 0;
            foreach (var property in key.Properties)
            {
                entries = Enumerable.Where(entries, e => e.Property(property.Name).CurrentValue == keyValues[i]);
                i++;
            }

            var entry = entries.FirstOrDefault();
            if (entry != null)
            {
                return entry.Entity;
            }
            
            var parameter = Expression.Parameter(typeof(TEntity), "x");
            var query = Queryable.Where(set, (Expression<Func<TEntity, bool>>)
                Expression.Lambda(
                    Expression.Equal(
                        Expression.Property(parameter, "Id"),
                        Expression.Constant(keyValues[0])),
                    parameter));
            
            return query.FirstOrDefault();
        }
    }

E agora no seu repositório você pode referenciar a classe acima e utilizar o método find.


1
2
3
4
public TEntity GetById(int id)
{
    return Db.Set<TEntity>().Find(id);
}

Comentários

Postagens mais visitadas deste blog

Migrando repositório TFS para GIT

Chega o momento em que decidimos migrar do TFS para GIT por 'N' motivos e benefícios que esta migração pode trazer. Caso você tenha uma repositório de longa data e queira manter o histórico de checkins, o  git-tfs auxilia nesta tarefa. Uma das minhas formas preferidas para instalar é através do chocolatey . Com o chocolatey instalado em sua máquina basta abrir o powershell em modo admin e digitar: cinst GitTfs No powershell para clonar o repositório TFS para seu repositório git você deve digitar o seguinte comando: git tfs clone http : //meutfs.com $/diretoriotfs c : /diretorio-alvo-clone --branches=all -u=CORP\Usuario -p=****** Para mais opções de comando segue link do github do projeto.

Dica: Extensão Indentar código VUE Visual Studio Code

Olá Por muitas é necessário um atalho para formatar o seu código fonte no editor de texto. Para formatação de HTML, CSS, JS e afins no visual studio code você pode utilizar o: HTML Snippets Mas esta extensão acima não formata arquivos de template .vue . Para formatar este tipo de arquivos é necessário instalar alguma outra extensão. Entre as que busquei a que faz o serviço da melhor forma atualmente utilizando o atalho alt+shift+f   é o plugin ventur: Vetur Este plugin é muito bom mesmo. Facilitou bastante a formatação de fontes em templates .vue. É isso espero que ajude;)

Vex dialog: Customizando texto de botões e recebendo callback corretamente

 Olá, Muitos projetos utilizam ótima esta biblioteca chamada VEX para exibir alertas, confirms entre outros tipos de 'modals' para o usuário substituindo o tradicional comando alert("texto"); do navegador (que tem visual mais feinho xD). Neste post quero mostrar como é possível customizar o texto de botões do vex.dialog.open e do vex.dialog.confirm, visto que muitos tem esta dificuldade. Quando você consulta a documentação você acha a seguinte instrução: Então você pensa... ok vou fazer meu  vex dialog e sobreescrever as propriedades do confirm ou open na construção do componente. Ficando mais ou menos assim: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 vex.dialog.confirm({ message: "Deseja confirmar?" , buttons: { YES: { text: 'Claro! Agora mesmo.' , className: 'vex-dialog-button-primary vex-dialog-button vex-first' , }, NO: { text: 'Ahhh, não quero......