Validierung von Objekten mittels Lambdaausdrücken

In jeder Anwendung wird man früher oder später mit Geschäftsobjekten arbeiten und diese eventuell auch persistieren. Nun gibt es ja das schöne Sprichwort „All input is evil“. Man sollte also nicht alles so speichern, wie es angeleifert wird. Es gibt ja immer mehrere Wege, die Daten zu manipulieren. Um einen Weg davon abzusichern, validiert man die Benutzereingaben vor der Weiterverarbeitung. Diese Validierung kann sehr einfach gestrickt sein, wie z.B. Text vorhanden, oder Zahl kleiner ein festgesetzter Wert. Aber es kann auch sein, dass die Validierung komplexer werden.
Hier möchte ich eine Möglichkeit aufzeigen, wie man diese Validierungen mittels Lambdaausdrücken (in C#) in ein Regelset zu packen und diese Regeln auszuwerten. Dazu muss man mit den Lambdaausdrücken in C# und den Klassen wie Func oder Predicate etwas vertraut sein.Weiterlesen »

Erweiterung in EFPF (Version 0.3)

Durch die Möglichkeit, eine Entität per Schlüssel über die neue API vom EF Code-First zu laden, habe ich das Interface IRepository um die Funktion GetByKey(object) erweitert. Die Funktion ist in den BaseRepository-Klassen von CodeOnly und Database implementiert.
Für die Implementierung im Namespace CodeOnly habe ich die eben erwähnte Funktion Find aus dem DbContext verwendet. In der Repositoryklasse aus dem Namespace Database habe ich eine eigene Implemetierung vorgenommen, welche auf der Erstellung einer Expression beruht. Da die Suche der Schlüsseleigenschaft Konventionen voraussetzen würde, ich dieses aber im Sinne der Kompatibilität auch vermeiden wollte, habe ich eine Eigenschaft Namens IdFieldExpression vom Typ Expression<func<tmodel, object="">> aufgenommen. Diese Eigenschaft sollte im Konstuktor der eigenen Klasse gesetzt werden.

public class MovieRepository : BaseRepository, IMovieRepository
{
  public MovieRepository(IUnitOfWork unitOfWork)
  : base(unitOfWork, "Filme")
  {
    //hier wird die Expression zum Auffinden der Key-Property gesetzt
    IdFieldExpression = mov => mov.fid;
  }

  public IEnumerable GetNewMovies()
  {
    return GetMany(film => film.faufnahme > DateTime.Now.AddMonths(-1));
  }
}

EFPF Update auf Entity Framework 4 Code First RC

Da in den letzten Tagen der Release Candidate des EF Code First veröffentlich wurde, habe ich EFPF auf den RC aktualisiert. Somit steht der Einsatz der neuen Version nichts mehr im Weg.
Bei Update gab es keine Änderungen in der API, so dass bestehende Anwendungen wie bisher laufen sollten.

Für alle Interessierten habe ich hier noch ein Video von Scott Hanselman und natürlich die Webseite zu EFPF.

Verwendung des EF Persistence Framwork

In einem vorherigen Artikel habe ich mein EF Persistence Framework (EFPF) vorgestellt. Nun möchte ich etwas zu dessen Verwendung schreiben.
Wie schon erwähnt, kann EFPF sowohl den Model/Database-First (Forward- oder Reverseengineering) als auch den Code-First-Ansatz unterstützen. In der Assembly gibt es zwei Namespaces für die entsprechenden Ansätze. Der Code-First-Ansatz befindet sich in CSP.EFPF.CodeOnly, in CSP.EFPF.Database sind die Klassen für Model/Database-First.Weiterlesen »