- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我要澄清一些词:当我使用“用户”这个词时,你必须理解“应用程序用户”和“ patient”是模型层中的一个“项目”。
现在让我们解释一下上下文:
客户端应用程序有一个按钮“get patient”和“update”,一个文本框“patient name”和单击“获取患者”按钮后显示返回患者的网格。
在服务器端,我有一个 WCF 方法 GetPatient(string name),它搜索回收的患者并对与 nHibernate 一起使用的 PatientEntity 执行一些业务逻辑。该方法返回一个 PatientDto(来自 PatientEntity 的映射)。我有一个 Update(PatientDto patient) 方法来更新修改后的患者。
用户可以修改返回的 PatientDto 并点击“Update”按钮。
到目前为止,我有两个想法通过这个 senario 来管理“session”:
第一个想法:我在我的 DTO 中公开了一个“ID”属性,因此当用户点击更新时,我在服务器端搜索“patient”,使用 nHibernate 的“GetByID()”,我用来自 PatientDto 的数据更新结果并调用 nHibernate 的“< em>Update()”方法。
第二个想法:我在服务器端手动创建一个 CustomSession(为了清楚起见,我使用这个名称)类,它封装了一个 ISession 并公开了 session 的唯一 ID它将在客户端和服务器之间传输。因此,当客户端向服务器发送 PatientDto 和唯一 session ID 时,我可以获得 CutsomSession 并使用 Update() 方法更新患者>ISession
我不喜欢这些想法。因为第一个开销很大而且没有使用nHibernate的特性。第二个想法要求开发人员在调用之间自行管理 CustomSession 的 ID:它很容易出错。
此外,我确信 nHibernate 提供了这样一种机制,尽管我用谷歌搜索并没有发现任何相关内容。
那么我的问题是:
预先感谢您的帮助,
最佳答案
我不认为这是一个 Hibernate 问题,在我看来这是一个常见的误解。 Hibernate 是一个 OR-Mapper,因此可以处理您的数据库对象并提供基本的事务支持。差不多了。
客户端-服务器环境中 Sessionmanagement 的解决方案是使用 e.g. Spring.net 确实为您的问题提供了解决方案(搜索 OpenSessionInView)并且与 NHibernate 集成得很好。
与基于 session 的解决方案相比,您提到的无状态方法具有许多优势。例如考虑并发性。如果您的提交是无状态的,您可以简单地对客户端失败的 Save() 操作使用react,例如通过重新加载 View 。
除了你使用 Hibernae 的 2 个很好的论据之外,如果做得好,安全性可以防止 SQL 注入(inject)。
关于nhibernate - 如何将 SOA 与 nHibernate 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6642883/
我是一名优秀的程序员,十分优秀!