i8a*_*bug 5 .net c# nhibernate entity
看来这将是一个普遍的问题,但我不知道解决该问题的最佳方法。我希望能够将一个实体发送到视图,对视图中的实体进行更改,但是如果用户从视图中取消,则可以取消(删除)那些更改。什么是执行此操作的正确方法。
我有两个选择,但我认为应该有其他更好的选择
1)获取一个实体,创建一个克隆,将克隆发送到视图...如果更改被接受,则使用克隆的值更新原始实体
2)将实体发送到视图,如果用户取消,则从NHibernate的缓存中删除该实体,然后从数据库中重新加载它
对于(2),对我来说,问题是,从缓存中删除旧实体后,仍然可以在我的整个项目中引用该旧实体。
编辑:
好的,因此如果我要实现方法(2),则必须采用evict方法。谢谢,我不记得那个细节。但是,引用我的旧逐出实体的视图对象问题使该问题难以解决。我不能只是在引发自定义逐出事件时不自动将视图更新为一个新实体,而不必在每个实体中都有自定义代码来重新绑定。在某些情况下,重新绑定可能并不容易。我可能需要考虑的更多,因为我可能过于复杂了,但此刻,此方法似乎比较棘手。
我怀疑我会被方法(1)所困扰,该方法有其自身的一系列问题,但将等待更长的时间才能看到其他人是否有一些想法。
编辑2:刚发现这个。我认为它几乎涵盖了详细的答案,并且附带了一个出色的演示项目- 使用NHibernate构建桌面待办事项应用程序-http: //msdn.microsoft.com/zh-cn/magazine/ee819139.aspx
除此之外,NHibernate还具有一个Session.Refresh(Object entity)函数,该函数似乎可以解决确切的问题。因此,当一个实体被更改但在保存之前被取消时,我可以调用Session.Refresh从数据库中重新加载它并放弃更改。
我将选择选项 1 并使用所谓的 ViewModel 而不是您的实体。ViewModel 是特定视图的模型的表示。在 ViewModel 中,您可以混合来自不同实体的数据并预先格式化值以适合视图。是一种将数据传递到视图的优雅方式,您可以轻松完成您想要的事情。
使用 ViewModel 正在成为 ASP.net MVC 和 Silverlight / WPF 中的首选工作方式。
要了解有关 Viewmodel 的更多信息:http://blogs.msdn.com/dphill/archive/2009/01/31/the-viewmodel-pattern.aspx
归档时间: |
|
查看次数: |
2870 次 |
最近记录: |