XAF之ObjectSpace

来源:互联网 发布:linux 安装tar 编辑:程序博客网 时间:2024/06/03 00:13

之前对XAF的objectspace一直懵懵懂懂,不明白为什么有时候在CreateObjectSpace有时候又直接从View的属性获取,直到细读了官方文档http://documentation.devexpress.com/#Xaf/clsDevExpressExpressAppObjectSpacetopic

现将其简要翻译一下:

语法

Visual Basic
Public Class ObjectSpace Inherits Object, IObjectSpace,IDisposable
C#
public class ObjectSpace : object, IObjectSpace,IDisposable

备注

      在XAF架构的最下层是XPO,XPO库为XAF提供了UnitOfWork类创建和管理数据库的数据。一个UnitOfWork包含了一个全部已加载/已创建的对象的列表,并且缓存了对象所有的改变,当调用某些方法时,UnitOfWork就会将这些数据推送到数据库保存。为了管理UnitOfWork和行为和执行某些额外的数据操作,XAF提供了ObjectSpace类。每一个View都分配了一个特定的ObjectSpace。该ObjectSpace负责该View的对象获取和创建。而且,一个ObjectSpace跟踪它的对象的所有改变,并在必要的时候将这些改变保存到数据库。要访问一个View的ObjectSpace,使用View.ObjectSapce属性。此外,你也可以访问一个对象集合的ObjectSpace并管理其拥有的全部对象,要达到该目的,使用CollectionSourceBase.ObjectSpace属性。

     调用ObjectSpace的方法CreateObject创建一个持久化对象(persistent object)。此时,该ObjectSpace会管理这个新建的对象的生命周期。在调用ObjectSpace的CommitChanges方法前,ObjectSpace会跟踪该对象的全部更改。

    要保存当前ObjectSpace包含对象的所有更改,调用CommitChanges方法。这些更改包括了:新建,修改或删除对象(查阅 IsModified, SetModified, ModifiedChanged, ModifiedObjects 和 Delete)。  比如,在执行SaveSaveAndClose动作时会调用CommitChanges方法。

注意

为确保持久化对象属性的更改能被缓存和提交,请在setter设置器内调用三个参数的SetPropertyValue方法。这是实现持久化属性的推荐方式。

          ObjectSpace也能执行一些辅助操作:搜索要求的对象(FindObject),获取需要的对象信息(GetPropertyName,GetKeyPropertyType,GetKeyValue),获取需要的对象(GetObject,GetObjectByKey)等等。

         要访问当前ObjectSpace使用的UnitOfWork,使用Session属性。详情查阅XPO文档。

         当新建了一个View后你可能需要创建一个新的ObjectSpace,此时使用XafApplication.CreateObjectSpace方法。注意,在某些情形下,你可以在当前ObjectSpace中创建一个View。例如:代表非聚合集合的Nested ListView就可以在父View的ObjectSpace中创建。当你需要一个独立的ObjectSpace提交更改时才需要创建一个Nested ObjectSpace,其类为NestedObjectSpace。Nested Object Space提交它自己对象的更改给父ObjectSpace。然后,这些更改将和父ObjectSpace的更改一同提交给数据库保存。例如:聚合集合的nested ListView在Nested ObjectSpace中创建。当需要创建一个nested ObjectSpace时,建议使用父ObjectSpace的CreateNestedObjectSpace方法。

注意

       当处理大量数据的处理创建或删除时,不适合使用ObjectSpace。在这种场景下,这些操作要么直接在数据库级别(使用SQL查询),要么使用轻量级的UnitOfWork类。作为替代的选择,也可以尝试使用不属于某个View的独立的ObjectSpace。这种ObjectSpace通过XafApplication.CreateObjectSpace方法获得。


原创粉丝点击