私はNHibernate(およびORMS)を初めて使用し、それが提示する無数のさまざまなオプションを把握しようとしています。参考までに、私は別のビジネス オブジェクトで Fluent NHibernate を使用しています。これらのビジネス オブジェクトは、純粋にデータ アクセスに DTO を使用します。私のアプリケーション アーキテクチャは、Windows と Web の「フロント エンド」の両方をサポートする必要があります。
非常に多くのオプションがあるように見えるので、私の悩みは一般的なアプローチの1つです。私の DTO は、以下のサンプルのようになります。各 DTO には、BO から渡される ISession への参照があります。それらは、独自のロードと保存を担当します。
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)...
まず第一に: これは正しいアプローチですか?
第二 に、保存/読み込みコードがどこにあるかに関係なく、存続期間またはオブジェクトに同じ ISession を使用する必要がありますか、それとも ISessionFactory への参照を持ち、データベースとのやり取りが必要になるたびに新しいセッションを開く必要がありますか?
// 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
もちろん、常にオプション 3 があり、上記のどれもありません :)