c# - NHibernate 和取消对实体的更改

标签 c# .net nhibernate entity

这似乎是一个常见问题,但我不知道解决它的最佳方法。我希望能够将实体发送到 View ,对 View 中的实体进行更改,然后在用户取消 View 时取消(删除)这些更改。执行此操作的正确方法是什么。

我有两个选择,但我认为应该有其他更好的选择

1) 获取一个实体,创建一个克隆,将克隆发送到 View ...如果更改被接受,用克隆的值更新原始实体

2) 将实体发送到 View ,如果用户取消,从NHibernate的缓存中移除实体并从数据库中重新加载

对于 (2),对我来说问题是旧实体在从缓存中删除后仍然可以在我的项目中引用。

编辑:

好吧,如果我正在实现方法 (2),那么 evict 方法是可行的方法。谢谢,我不记得那个细节了。但是,引用我的旧驱逐实体的 View 对象问题使问题难以处理。我不能让我的 View 自动更新到一个新实体,而无需在每个实体中都有自定义代码以在引发我的自定义驱逐事件时重新绑定(bind)。在某些情况下,重新绑定(bind)可能并不简单。我需要更多地考虑这个问题,因为我可能过于复杂了,但目前,这种方法似乎更棘手。

我怀疑我会被方法 (1) 困住,它有自己的一系列问题,但会等待更长的时间看看是否有人有一些想法。

编辑 2:刚找到这个。我认为它几乎涵盖了详细的答案并附带了一个很棒的演示项目 - 使用 NHibernate 构建桌面待办应用程序 - http://msdn.microsoft.com/en-us/magazine/ee819139.aspx

除此之外,NHibernate 有一个 Session.Refresh(Object entity) 函数,它似乎可以解决确切的问题。因此,当一个实体被更改但在保存之前被取消时,我可以调用 Session.Refresh 从数据库中重新加载它并放弃更改。

最佳答案

我将选择选项 1,并使用所谓的 ViewModel 而不是您的实体。 ViewModel 是您为特定 View 建模的表示。在 ViewModel 中,您可以混合来自不同实体的数据和预格式化值以适合 View 。是一种将数据传递到 View 的优雅方式,您可以轻松完成您想要的。

使用 ViewModel 正在成为在 ASP.net MVC 和 Silverlight/WPF 中工作的首选方式。

要阅读有关 View 模型的更多信息:http://blogs.msdn.com/dphill/archive/2009/01/31/the-viewmodel-pattern.aspx

关于c# - NHibernate 和取消对实体的更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2544947/

相关文章:

c# - 当您读取/写入缓存时,该信息处于什么级别?

c# - 从给定的时间戳字符串中查找时区和时间

.net - 将两个 observables 与两者之间的 Action 连接起来

c# - 我如何使用 Fluent NHibernate 来区分父关系的列

c# - 在 Entity Framework 中获取数据

javascript - C# 类属性在 Javascript 中不可访问

c# - 使用 Windows 资源管理器的重命名事件 Hook 我的程序

c# - 将派生属性映射到数据库中的序列化列

database - Hibernate,将多个列分配为主键

c# - 如何读取数组列表中对象的属性