【发布时间】:2011-07-10 18:06:51
【问题描述】:
首先,我要澄清一些词:当我使用“用户”这个词时,你必须理解“应用程序用户”和“患者”是模型层中的一个“项目”。
现在让我们解释一下上下文:
客户端应用程序有一个按钮“获取病人”和“更新”,一个文本框“病人姓名”和单击“获取患者”按钮后返回的患者显示的网格。
在服务器端,我有一个 WCF 方法 GetPatient(string name),它搜索回收的患者并对与 nHibernate 一起使用的 PatientEntity 执行一些业务逻辑。该方法返回一个 PatientDto(来自 PatientEntity 的映射)。而且我有一个 Update(PatientDto patient) 方法来更新修改后的病人。
用户可以修改返回的PatientDto并点击“更新”按钮。
到目前为止,我有两个想法来通过这个 senario 管理“会话”:
第一个想法:我在 DTO 中公开了一个“ID”属性,因此当用户单击更新时,我会在服务器端搜索“ patient" 使用 nHibernate 的 "GetByID()" 指定 ID,我使用来自 PatientDto 的数据更新结果并调用 nHibernate 的 "Update()" 方法。
第二个想法:我在服务器端手动创建一个 CustomSession(为了清楚起见我使用这个名称)类,它封装了一个 ISession 并公开了一个会话的唯一 ID它将在客户端和服务器之间传输。因此,当客户端向服务器发送 PatientDto 和唯一会话 id 时,我可以获取 CutsomSession 并使用 Update() 方法更新患者>ISession
我不喜欢这些想法。因为第一个开销很大,并且没有使用 nHibernate 的特性。第二个想法要求开发人员自己管理调用之间的 CustomSession 的 id:这很容易出错。
此外,我确信 nHibernate 提供了这样的机制,尽管我在谷歌上搜索并没有发现任何相关信息。
那么我的问题是:
- 我应该使用什么机制(模式)?当然,该机制应该支持实体的对象图,而不是单个实体!”
- nHibenrate 是否提供这种机制?*
提前感谢您的帮助,
【问题讨论】:
标签: nhibernate soa