2

Ich habe mehrere Projekte mit dem Repository-Muster (Interface => Repository) gemacht, aber jetzt stehe ich eine neue Herausforderung (nicht eine große) mit einem meiner Mitarbeiter-Code. Wir implementieren einen generischen Dienst, der alle CRUD-Operationsmethoden für alle Entitätsklassen enthält.Implementieren generischer Service für CRUD-Operationen mit EF6

Wir Datenbank verwenden, werden zunächst in diesem Projekt und haben die folgende Struktur,

aspx.cs> entityClass (AppUser)> Allg Service> Entity-Modell.

public class UserServices : GenericServices<User> 
    { //Implemented methods } 

Und wie Generic Service:

public class GenericServices<T> where T : class 
{ 
    App_dbEntities _db; 
    IDbSet<T> ent; 

    public GenericServices() 
    { 
     _db = new App_dbEntities(); 
     ent = _db.Set<T>(); 
    } 

    public IEnumerable<T> Select() 
    { 
     return ent; 
    } 

    public T Select(string id) 
    { 
     ?? 
    } 
} 

Ich versuche, die Einheiten der Eigenschaften zu handhaben, aber da dieses generisch ist, es nicht weiß, welche Einheit im Moment ist Umgang . Ich habe einige Beispiele gesehen, die das Prädikat als Funktionsparameter verwenden. Bitte gib mir eine Hand.

public virtual T Select(params object[] keyValues) 
{ 
    return ent.Find(keyValues); 
} 

Auf diese Weise können auch Einheiten mit Composite Primärschlüssel finden:

+2

Sie die 'find' Methode der IDbSet Schnittstelle zu verwenden:' Rückkehr Eintr. Finde (id) ' – Thomas

Antwort

2

Wenn Sie Flexibilität wollen und bereit sind Ausdrücke wie Ihr Prädikat

public virtual T Select(Expression<Func<T, bool>> predicate) 
{ 
    return _dbSet.FirstOrDefault(predicate); 
} 

Nutzungs

var service = new AppUserServices(); 
var appUser = service.Select(s=> s.CompositeKey1 == "some_value" && s.CompositeKey2 == "some_other_value"); 
var appUser2 = service.Select(s=> s.IntProperty == 100 && s.AnotherStringProperty == "some_other_value"); 
1

mit @Thomas Zugegeben, Sie Find Methode, wie ich unten zeigen können. Ich schlage vor, einen Blick auf dieses codeplex project zu nehmen, werden Sie eine Implementierung von Repository, UnitOfWork, und auch Dienst Muster finden. Es wird dir gute Ideen geben.