Ich überprüfe Linq for NHibernate 2.1 in einer ASP.NET MVC-Anwendung zu verwenden, und ich versuche, Sitzungsverwaltung herauszufinden. Als ein erstes Experiment versuche ich, die SportsStore-Anwendung von Pro ASP.NET MVC Framework zu ändern. Diese Beispiel-App verwendet Linq zu Sql, also dachte ich, es wäre eine gute Übung. Ich habe NHibernate 2.1 Zugriff auf die Datenbank und Non-Linq-Abfragen funktionieren gut.NHibernate Linq Sitzungsverwaltung
In Linq to SQL können wir ein IQueryable-Objekt aus einem Datenkontext und einer Verbindungszeichenfolge erstellen, die herumgereicht und verwendet werden kann, ohne sich darum kümmern zu müssen, irgendeinen Kontext zu pflegen. So zum Beispiel, der ursprüngliche Produkt Repository Code liest so etwas wie:
public IQueryable<Product> Products
{
get { (new DataContext(_connectionString)).GetTable<Product>();
}
und die App verwendet das zurück IQueryable Produktlist zu füllen, Produktdetails abrufen usw.
In NHibernate Linq in ähnlicher Weise ein Datum verwendet Kontext, sondern von einer Verbindungszeichenfolge liefern wir ein Session-Objekt, das in Rahmen bleiben muss, während die IQueryable in Gebrauch sind:
IQueryable<Product> products = new SportsStoreContext(session).Products;
Also ich frage mich, wie ich die Sitzung verwalten soll, ohne zu viel Gewalt an der Struktur der Musteranwendung. Idealerweise hätte ich gerne eine Lösung, die es mir ermöglicht, Linq- und SQL-Code durch NHibernate Linq zu ersetzen, indem nur lokale Änderungen vorgenommen werden.
Eine NHibernate-Sitzung implementiert IDisposable und die meisten NHibernate-Beispiele demonstrieren die Sitzungsverwaltung mit einem Konstrukt {}, aber diese Strategie würde hier nicht funktionieren. This thread diskutiert einige verschiedene Ansätze, die S#arp Architecture und die HybridSessionBuilder. Verwendet jemand diese, um Linq zu Sql mit NHibernate Linq zu ersetzen? Gibt es andere Methoden, die besser funktionieren würden?
** EDIT mausch hat es richtig - der übliche Weg, dies zu erreichen ist mit einem httpmodul. NHibernate in Action beschreibt zwei Möglichkeiten, dies zu tun: Sitzung-pro-Anfrage (p334) und Sitzung-pro-Konversation (p340). Letzteres ermöglicht es Ihnen, persistente Instanzen über mehrere HTTP-Anfragen hinweg wiederzuverwenden. Zusätzlich zu den von mausch bereitgestellten Links erwähnt NHibernate in Action NHibernate Burrow, Castle ActiveRecord und Rhino Tools.
Richtig du bist mausch. Ich experimentiere mit Code und lese NHibernate in Action. Ich habe gerade Kapitel 10 (Architekturmuster für Persistenz) durchgelesen, wo sie auch dieses Muster beschreiben. – keithm