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
Postar um comentário