我是NHibernate(和ORMS)的新手,試圖去處理它提供的各種不同選項。作爲參考,我將Fluent NHibernate與單獨的業務對象一起使用,而這些業務對象又將DTO完全用於數據訪問。我的應用程序架構必須同時支持Windows和Web「前端」。構建NHibernate DTO的最佳方法
我的困惑是一種普遍的方法,因爲似乎有這麼多的選擇。我的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,以上都不是:)
當一個對象知道如何保存自己被稱爲DAO,這與DTO – 2011-01-01 16:53:43