Sono nuovo di NHibernate (e ORMS) e sto cercando di venire a capo della miriade di diverse opzioni che presenta. Per riferimento, sto utilizzando Fluent NHibernate con oggetti business separati che a loro volta utilizzano DTO esclusivamente per l'accesso ai dati. La mia architettura dell'applicazione deve supportare sia i "front-end" di Windows che quelli web.Il migliore approccio per la costruzione di DTI NHibernate
Il mio dilemma è un approccio generale in quanto sembrano esserci tante opzioni. Il mio DTO ha un aspetto simile al seguente esempio. Ogni DTO ha un riferimento a una ISessione che viene passata loro dalla BO. Essi sono responsabili del proprio carico e risparmia:
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)...
Prima di tutto: È questo l'approccio corretto a prendere - se il DTO avere la possibilità di salvare e caricare se stesso?
In secondo luogo: Indipendentemente da dove Save/codice di carico si trova, è necessario utilizzare lo stesso ISession per tutta la vita o di un oggetto, o dovrebbero avere un ref al ISessionFactory e apre una nuova sessione ogni interazione del database volta è obbligatorio?
// 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
Naturalmente c'è sempre l'opzione 3, nessuna delle precedenti :)
Quando un oggetto sa come salvare se stesso viene chiamato DAO, questo non ha nulla a che fare con DTO –