Neues Webseitenprojekt „Rezeptbuch“

Es ist schon eine Weile her, dass ich gepostet habe. Nun habe ich ein neues Projekt begonnen. Zur Sommerzeit kommt auch meine Kochlust wieder und somit auch die Kreativität beim Suchen nach neuen Projekten. Um beides miteinander zu verbinden habe ich mich entschlossen, eine Webseite für Rezepte zu schreiben. Natürlich sollen auch hier alle vorab beschriebenen Techniken zum Einsatz kommen. Ein Besuch lohnt sich da in zweierlei Hinsicht. 🙂
Die Seite ist über die Adresse rezepte.csharp-paradise.de zu erreichen.

Ich habe auch begonnen einen Secure Token Service (STS) aufzusetzen, der in Zukunft als zentrales Benutzerrepository dienen soll. Dazu werde ich in den kommenden Tagen ein paar Informationen veröffentlichen.

Umzug auf einen eigenen Server

Es ging nun schneller als gedacht. Mein geplanter, aber leider nicht angekündigter, Umzug auf einen eigenen Server ist schon vollbracht. Wer in den letzten Tagen Probleme bei der Erreichbarkeit der Seite gehabt hat, bitte ich dies zu entschuldigen. Das wird es wohl für die nächste Zeit gewesen sein. So ein eigener Server macht aber was her. Da kann man sich endlich frei ausdehnen und hat keine Beschränkungen zu befürchten.
Durch die neue Freiheit war ich gleich inspiriert und habe ein neues Webprojekt angefangen. Dazu aber in den kommenden Tagen mehr.

Glimpse.Net bietet Serverdebugging in ausgerollten Webanwendung

Heute habe ich ein Package in NuGet entdeckt, welches die Arbeit vieler Web-Entwickler erleichtern wird. Die rede ist von Glimpse (http://getGlimpse.com).

Glimpse ist, wie es sich selbst bezeichnet, ein Client-side Debuggingtool für Webanwendungen. Mittels Glimpse kann man ASP.NET WebForms und ASP:NET MVC-Anwendungen debuggen. Dazu muss man lediglich das Package mittels Nuget einbinden.

 PM>  Install-Package Glimpse

Weiterlesen »

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 »

Probleme mit dem AntiForgeryToken in MVC2

In den letzten Tagen habe ich ein paar Probleme mit dem Antiforgerytoken des Html-Helpers. Bei einem Timeout des Authentication-Tokens und einen nachfolgenden Redirect auf die Loginseite wird ein Serverfehler ausgelöst. In der Version 3 von MVC existiert dieses Problem nicht mehr. Ein Test hat erwiesen, dass es hier eine Überarbeitung gegeben hat.
Einen Workaround habe ich nun auch gefunden. Wenn man die Methoden von Version 2 und 3 vergleicht, sieht man eine Überarbeitung beim Laden des Cookies. Dies lässt sich beim Einsatz von Version 2 damit umgehen, dass man die Cookies beim Laden der Loginview entfernt.
[csharp]
public ActionResult LogOn()
{
FormsService.SignOut();
Response.Cookies.Clear();

//Workaround
Request.Cookies.Clear();

Session.Clear();
Session.Abandon();

return View();
}
[/csharp]

Das Problem scheint wohl nur dann aufzutreten, wenn das Timeout des ApplicationPool des IIS abgelaufen ist.

Erweiterung zum Entity Framework CTP5 (EF Persistence Framework)

Wer OO-Programmierer mit Leib und Seele ist, wird wahrscheinlich schon von der neuen CTP 5 des Entity Framework gehört haben. Das Zauberwort lautet code-only. Man kann also einfach mit seinem Modell anfangen, so wie man es auch OOP-Entwickler gewohnt ist. Mit ein paar Annotationen oder Beachtung einiger Konventionen kommt man sehr schnell zu einem schönen Modell. Nun fehlt noch ein Kontext, der sich einfach von der Klasse DbContext ableiten lässt und die Sets werden als generische DbSet-Eigenschaften angelegt.Weiterlesen »