Ich bin neu in NHibernate (und ORMS) und versuche, die unzähligen verschiedenen Optionen, die es bietet, in den Griff zu bekommen. Als Referenz verwende ich Fluent NHibernate mit separaten Geschäftsobjekten, die wiederum DTOs ausschließlich für den Datenzugriff verwenden. Meine Anwendungsarchitektur muss sowohl Windows- als auch Web-Frontends unterstützen.Der beste Ansatz für den Bau von NHibernate DTO's
Meine Quandry ist eine der allgemeinen Ansatz, da es so viele Möglichkeiten zu sein scheint. Mein DTO sieht ungefähr so aus wie das folgende Beispiel. Jeder DTO hat einen Verweis auf eine ISession, die ihm vom BO übergeben wird. Sie sind verantwortlich für ihre eigene Last und sparen:
public class EmployeeDTO...
// Data Properties to be persisted to the database
public virtual int Id { get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual ISession Session { get; set; }
// Save logic
public virtual void Save()
{
var transaction = Session.BeginTransaction();
Session.SaveOrUpdate(this);
transaction.Commit();
}
// Load logic
public virtual void Load(int id)...
Vorweg: Ist dies der richtige Ansatz zu nehmen - sollte die DTO die Fähigkeit hat, zu speichern und zu sich selbst zu laden?
Zweitens: Unabhängig davon, wo die Save/Load-Code liegt, sollten Sie die gleiche ISession für die Lebensdauer oder ein Objekt verwenden, oder sollte sie haben einen ref zum ISessionFactory und öffnen Sie eine neue Sitzung jedes Mal, Datenbank-Interaktion Wird benötigt?
// Open a new session every time I interact with the repository
var session = FluentSupport.SessionFactory.OpenSession();
var transaction = Session.BeginTransaction();
Session.SaveOrUpdate(this);
transaction.Commit();
session.Close();
// Close the session when I'm done
Natürlich gibt es immer die Option 3, keine der oben genannten :)
Wenn ein Objekt weiß, wie sich selbst zu retten ist DAO genannt, das nichts mit DTO –