私はNHibernate(およびORMS)の新機能であり、さまざまなオプションが用意されています。参考までに、Fluent NHibernateを別々のビジネスオブジェクトと共に使用しています。これは純粋にDTOをデータアクセスに使用しています。私のアプリケーションアーキテクチャは、ウィンドウとウェブの両方のフロントエンドをサポートしなければなりません。NHibernate DTOを構築するための最善のアプローチ
非常に多くのオプションがあるように私の過度のアプローチは一般的なアプローチの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)...
まず: これは取るべき正しいアプローチです - DTOを保存し、自分自身をロードする能力を持っている必要がありますか?
第二: は関係なく、セーブ/ロード・コードがどこにあるの、あなたは一生またはオブジェクトに対して同じ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、のDTOは(セーブ、ロードなど)の挙動を含んでいないと、彼らは持続し得る方法の知識が含まれていない、一般的には
オブジェクトが自身を保存する方法を知っているDAOと呼ばれ、これはarchitecureは、ウェブ(シルバー)およびWindows(WPF)の両方をサポートする必要があるDTO –