我是新来的NHibernate(和运筹学和管理学),并试图来与它呈现出不同的选项无数交手。 作为参考,我用流利的NHibernate的配有独立的业务对象这反过来使用DTO的纯粹的数据访问。 我的应用程序的架构必须同时支持Windows和Web“前端”。
我奎德里是一般的方法之一,因为似乎有这么多的选择。 我的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,以上都不是:)