2017-11-17 1 views
0

Ich versuche, eine generische CRUD für mein Projekt zu machen. Ich habe jedoch DataBaseFirst verwendet und sehe keine generische Entity-Klasse, die vererbt werden kann. Nun, es macht nicht den geringsten Sinn, schließlich, wenn ich die Bank upgrade, müsste es in alle mehr als 60 Klassen der Tabellen gehen und die Vererbung wieder hinzufügen. Ich möchte die Entity-Klassen, die die Entity Framawork erzeugt, rein, wie sie erzeugt wurden.Generische CRUD in Entity Framework mit einer Entität nicht angegeben

Also versuche ich, so etwas wie:

public class DaoEF<TEntity> : IDaoEF<TEntity> 
    where TEntity : class 
{ 
    public GPSdEntities _dbContext { get; set; } = new GPSdEntities(); 


    public async Task<TEntity> GetById(int id) 
    { 
     return await _dbContext.Set<TEntity>() 
        .AsNoTracking() 
        .FirstOrDefaultAsync(e => e.Id == id); 
    } 

Aber wie Sie ableiten kann ich dieses Problem über die Eigenschaft nicht definiert ist, da wie gesagt, ich habe nichts haben wollen wie ein " Allgemeine Entität ".

Weiß jemand irgendwie ich kann das tun? Vielleicht hat es eine Klasse, die Entity standardmäßig verwendet, die in der Where-Einschränkung verwendet werden kann. Oder vielleicht, wenn ich statt Generics Reflection benutzte? Irgendeine Idee?

+0

Sie könnten vielleicht tun '' ((dynamisch) e) .Id == id'' –

+0

Oder verwenden Sie die 'Find' Methode:' _dbContext.Set () .AsNoTracking(). Finden (id) '(wenn es mit AsNoTracking ...) – DavidG

+0

Also danke für Sie antwortet RandRandom und DavidG !!! Es ist mein Problem zu lösen. – AlamEstudent

Antwort

0

Nach langer Suche fand ich diesen Artikel in Portugiesisch: https://msdn.microsoft.com/en-us/library/dn630213.aspx

Diese generischen Methoden in der generischen Klasse verwenden:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.Entity; 
using Repositorio.DAL.Contexto; 
namespace Repositorio.DAL.Repositorios.Base 
{ 
public abstract class Repositorio<TEntity> : IDisposable, 
    IRepositorio<TEntity> where TEntity : class 
{ 
    BancoContexto ctx = new BancoContexto(); 
    public IQueryable<TEntity> GetAll() 
    { 
     return ctx.Set<TEntity>(); 
    } 

    public IQueryable<TEntity> Get(Func<TEntity, bool> predicate) 
    { 
     return GetAll().Where(predicate).AsQueryable(); 
    } 

    public TEntity Find(params object[] key) 
    { 
     return ctx.Set<TEntity>().Find(key); 
    } 

    public void Atualizar(TEntity obj) 
    { 
     ctx.Entry(obj).State = EntityState.Modified; 
    } 

    public void SalvarTodos() 
    { 
     ctx.SaveChanges(); 
    } 

    public void Adicionar(TEntity obj) 
    { 
     ctx.Set<TEntity>().Add(obj); 
    } 

    public void Excluir(Func<TEntity, bool> predicate) 
    { 
     ctx.Set<TEntity>() 
      .Where(predicate).ToList() 
      .ForEach(del => ctx.Set<TEntity>().Remove(del)); 
    } 

    public void Dispose() 
    { 
     ctx.Dispose(); 
    } 
} 

}

Verwandte Themen