Generischer Zugriff auf DbContext

ObjectContext erlaubt den generischen Zugriff auf die erzeugten Entitäten. DbContext zu haben scheint, keine solche Unterstützung. Zugriff auf EF5 mit einem generischen repository ist eine Herausforderung. Sagen wir, ich will einen generischen Mechanismus zum Lesen von jeder bestimmten Person, nennen es TEntity:

public class DataRepositoryEF5<T> where T: DbContext
{
    private ObjectContext _context;        

    public DataRepositoryEF5(DbContext context)
    {
        _context = ((IObjectContextAdapter)context).ObjectContext;
    }

    public IEnumerable<TEntity> ReadAll<TEntity>() where TEntity : class,new()
    {
        return GetObjectSet<TEntity>().AsEnumerable();
    }

    protected ObjectSet<TEntity> GetObjectSet<TEntity>() where TEntity : class,new()
    {
        ObjectSet<TEntity> result;
        result = _context.CreateObjectSet<TEntity>();
        return result;
    }
}

Nutzung

            var context = new MyContext();            
            var repository = new DataRepositoryEF5<MyContext>(context);

            IEnumerable<Document> results = repository.GetAll<Document>();

            foreach (var item in results)
            {
                Console.WriteLine("{0} {1} {2} {3}", item.Description, item.Id, item.Property, item.Whatever);
            }

EF verwendet zum generieren von Klassen mit einem gemeinsamen Basistyp EntityObject. Da ist das nicht mehr der Fall, die beste Einschränkung, die ich haben kann, ist class...

Zweite, denn es gibt kein äquivalent ObjectContext.CreateObjectSet<>() bin ich gezwungen den cast von DbSet zu ObjectSet.

Mit diesem Muster im Ort, habe ich keine Notwendigkeit für DbContext. Ohne generics bin ich gezwungen, hand-code alle CRUD-Operationen. Hab ich was verpasst? Wenn nicht, ist es möglich zu sagen, EF5, code zu erzeugen, mit ObjectContext statt?

haben Sie einen Blick auf diesen Tipp gepostet, dass ich auf codeproject vor einer Weile codeproject.com/Tips/309753/...
Ja, der Artikel ist genau das was ich brauche! Pro dein Beispiel Kontext.Set<>() ist der neue Weg, es zu tun. Ich sehe, Sie sind auch mit einem class Einschränkung auf die Entitäten. Wenn Sie buchen möchten, den Kommentar als Antwort, ich gebe Antwort Kredit. –

InformationsquelleAutor P.Brian.Mackey | 2013-08-09

Schreibe einen Kommentar