作为我无尽的受 NHibernate 启发的 DAL 重构炼狱的一部分,我已经开始使用存储库模式来使 NHibernate 远离我的 UI 层。这是来自存储库的 Load 方法的示例。
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
}
return storedWill;
}
我喜欢我的网站不知道什么是 ISession 的事实。
自然,我开始遇到延迟初始化异常,因为上面的方法没有加载 StoredWill,它只是返回一个代理。当您访问代理的属性时,您会收到异常,因为您不再处于 ISession 的范围内。当我意识到发生了什么事时,我放声大笑。
我已经解决了这个问题:
public StoredWill Load(int id)
{
StoredWill storedWill;
using (ISession session = NHibernateSessionFactory.OpenSession())
{
storedWill = session.Load<StoredWill>(id);
string iReallyCouldntCareLess = storedWill.TestatorLastName;
}
return storedWill;
}
但这一切似乎有点傻。有没有人使用稍微优雅一点的模式?
爱你们。
大卫