本主题介绍有关列表视图如何提供数据访问的几种方式。请注意,选择正确的方式对于实现XAF应用程序的最佳性能至关重要。

 

 数据访问模式概述

 

模型编辑器中,通过 视图-> <ListView>节点找到IModelListView.DataAccessMode属性,指定显示的对象集合是如何被访问。可用值- Client,ServerInstantFeedbackDataView

提示

当通过使用IModelListView.EditorType属性设置了不同的编辑器时,DataAccessMode中的值并不会隐藏掉不支持的模式。

如果您使用自定义列表编辑器,您可以通过静态方法DataAccessModeHelper.RegisterEditorSupportedModes指定支持的模式。

您可以在加载模型编辑器之前(例如,从模块的构造函数)在设计时执行的任何代码调用此方法。将列表编辑器类型及其支持的模式列表传递到此方法。默认情况下,所有模式都可用于自定义列表编辑器。

默认模式是Client,这在大多数情况下,适当的使用ServerInstantFeedbackDataView模式是提升性能问题的好方法,但它们使用不同的优化方法。下表提供了每种模式的详细说明。

Client:

在显示列表时,一次性的将数据库中的所有记录都读到客户端(win是客户端,web是读取web服务器内存中),不管界面上显示了多少数据,都先放到内存中去。执行排序、分组、分页、过滤,时,都是去操作内存数据。

这看起来不错吧,然后,在数据很多,关联很复杂时,一次性加载这么多会让我们感覺很慢(比如几万条),也很占内存。

Server:

假设我们使用的是sql数据库(oracle,mysql,mssql都算上),这种模式是使用sql语句进行分组、分页、排序、过滤的,这样会让数据不需要全部返回,数据多时,压力转移到sql服务器。只加载显示出来的部分,或一小部分数据,每次需要时,再去读取。数据量大时,比起client快很多。

  • 如果使用其表具有复合主键的旧数据库,则无法使用此类表在服务器模式下提供数据。
  • 如果你有一个自定义的控制器访问的列表视图列表编辑器的控件执行自定义排序或分组,控制器可能不再有效,因为分组和排序是由数据库服务器执行的。自定义摘要也在服务器端计算。有关服务器模式的限制的其他信息,请参阅XtraGrid中服务器模式局限性的话题。
  • 支持服务器模式的控件不能完全访问底层数据,并且无法在客户端启动过滤,排序和分组操作。这些操作委托给底层的ORM(Entity Framework或XPO),它构造一个合适的SQL语句,并对SQL服务器执行查询,以检索应立即显示给用户的一小部分数据。您不能根据非持久化属性过滤,排序和分组数据 - 不能针对客户端上存在的运行时值构建SQL查询,并在数据库服务器上执行它。因此,如果属性不是持久化的,则在服务器模式中禁用过滤,分组和排序操作
  • 目前,该服务器模式由两个内置列表编辑器的支持下- GridListEditor,在Windows中默认使用窗体应用程序,以及ASPxGridListEditor,默认使用在ASP.NET Web应用程序。

  实际使用中,遇到的较多的问题是:属性不是持久化的,不支持过滤、排序功能。可以考虑用PersistentAlias来做服务端计算表达式,用了这个之后,我们基本可以放弃要使用sql语句的功能了。

InstantFeedback:

此模式与服务器模式非常相似。所不同的是,

该数据感知操作在后台线程异步执行(16.X中的新功能)

,并且控制继续响应于用户的操作,而被检索到的数据(见即时反馈模式)。这就是为什么上述常规(同步)服务器模式的限制也适用于即时反馈的原因。附加限制:

  • 此模式是只能用于WinForms form中的GridListEditor
  • 不支持InLine编辑。
  • 引用属性排序时,分组和过滤被自动由相应的引用对象的默认属性所取代。例如,在联系人列表视图中,Contact.Department.Title属性是用来代替Contact.Department

DataView:

一次性加载所有的数据,但不是转换为ORM对象,返回的是数组。

  • 不支持非持久化属性,但可以使用计算字段。
  •  
    引用型属性不会直接显示,但会用引用属性中的DefaultProperty(通过XafDefaultProperty指定的)。
  •  
    支持的控件-win:GridListEditor、 SchedulerListEditor、 PivotGridListEditor
  • Web : ASPxGridListEditor、 ASPxSchedulerListEditor、 ASPxPivotGridListEditor 在 ASP.NET Web 。
  • SchedulerListEditor 和 ASPxSchedulerListEditor 的编辑在此模式下不支持“资源”。
  •  
    在嵌套的列表视图中的链接、 取消、 新建、 删除和编辑操作 都是被设计为禁用的。
    ListView.CurrentObject、 ListView.SelectedObjects 和 SimpleActionExecuteEventArgs.SelectedObjects 的属性返回视图记录的对象,而不是原始的业务对象。要获得真正的对象,请使用 ListView.GetObject 方法。
    如果你在viewcontroller中等代码中使用了递归的取数据时,可以考虑使用Client模式,有可能他们并没有什么差别。
提示

  • 您可以全局的修改所有列表视图(除了自动生成的嵌套列表视图)的数据访问方式,设置IModelOptions.DataAccessMode的属性选项节点即可。
  • 所有手动创建的列表视图,包括嵌套的列表视图,默认使用IModelListView.DataAccessMode属性值。
  • 在代码中创建CollectionSource并应用于ListView时,您可以使用CollectionSource.CollectionSource的构造函数中的dataAccessMode参数来指定模式。
注意

当你定义了一个集合属性,但并没有使用Association建立关系时,你应该使用Client模式,因为,没办法推导出如何过滤这个集合。

啥意思呢,你直接在代码写了个集合属性:return new XPCollection<T>("条件");

XAF不可能使用服务端模式,因为“条件”是怎么来的,是不可以确定的,不可以自动推算出来的,比如你是动态变化的,XAF也不知是啥规则。

重要

使用Server、InstantFeedbackDataView模式时,想显示非持久化属性时,应该用PersistentAliasAttributeCalculatedAttribute属性。

 

 如何选择合适的数据访问模式

 

服务器InstantFeedback数据视图模式旨在改善列表视图的性能,但应根据不同的场景。

  • 如果数据库请求数量是关键问题时,那么就应该选择DataView模式。在此模式下,所有数据记录只请求一次,然后在客户端执行分组,排序和过滤,无需额外请求。引用类型的属性也会一次加载过来,产生的SQL就是left join。在DataView模式,只加载界面可见的列,如果理解成sql语句,则是 select a,b,c from xx ,而其他模式(ClientServer)则是加载所有的列,则是select * from xx *还有可能是更多,也会产生更多次请求,比如没有设置显示的加载引用型属性,就会再生成几次引用属性的加载。

  • 如果列表视图启动时间非常重要,那么你应该选择Server或InstantFeedback模式。在这些模式下,只有可见的对象都被第一次请求时加载。然而,滚动、 分组、 排序和筛选导致附加的数据库请求-则是按需加载数据。

  • 如果性能还不错,只需使用Client模式。不要启用ServerInstantFeedbackDataView,除非你发性能不能接受,或是找到了合适的模式时。务必记住本主题前面列出的限制。需要注意的是如果数据很少,ServerInstantFeedback模式并没有什么意义。

XAF-列表视图数据访问模式的更多相关文章

  1. Apply Grouping to List View Data 将分组应用于列表视图数据

    This lesson will teach you how to apply grouping to List View data. For this purpose, you will group ...

  2. android数据访问模式:档、SharedPreferences

    android数据访问模式:档.SharedPreferences.SQLite 数据库.Content provider 文件流: 使用java IO流对文件进行读写操作,文件权限默认. 指定文件权 ...

  3. 数据访问模式之Repository模式

    数据访问模式之Repository模式   数据访问层无非就是对数据进行增删改查,其中增.删.改等我们可以抽象出来写一个公共的接口或抽象类来定义这些方法,并采用一个基类实现这些方法,这样该基类派生的子 ...

  4. 数据访问模式:Identity Map(标识映射)模式

    1.Identity Map模式简介 Identity Map(标识映射)模式是通过将所有已加载对象放在一个映射中确保所有对象只被加载一次,并且在引用这些对象时使用该映射来查找对象.在处理数据并发访问 ...

  5. SharePoint 2010 应用url参数过滤列表视图数据(应用get办法过滤列表数据)

    名人名言:读活书,活读书,读书活.——郭沫若 题目其实不知道如何称呼才干合适大师的搜刮习惯.以便有类似题目经由过程百度或google可以搜刮到,其实就是在url后面添加参数过滤显示我们想要的成果,有人 ...

  6. 数据访问模式:数据并发控制(Data Concurrency Control)

    1.数据并发控制(Data Concurrency Control)简介 数据并发控制(Data Concurrency Control)是用来处理在同一时刻对被持久化的业务对象进行多次修改的系统.当 ...

  7. Make a List View Editable 使列表视图可编辑

    In this lesson, you will learn how to make a List View editable. For this purpose, the DemoTask List ...

  8. EF3:Entity Framework三种开发模式实现数据访问

    前言 Entity Framework支持Database First.Model First和Code Only三种开发模式,各模式的开发流程大相径庭,开发体验完全不一样.三种开发模式各有优缺点,对 ...

  9. Entity Framework:三种开发模式实现数据访问

    原文地址 http://blog.csdn.net/syaguang2006/article/details/19606715 前言 Entity Framework支持Database First. ...

随机推荐

  1. 使用rem设计移动端自适应页面二(转载)

    由于日常需求以无线居多,所以可以在业务中做一些尝试,如 rem,刚接触这个特性的时候,曾经一度爱不释手,仿佛在无线开发的坎坷路上寻找到一条捷径.然而随着使用范围的扩大,慢慢的发现了一些使用 rem 带 ...

  2. Solr多核心及分词器(IK)配置

    Solr多核心及分词器(IK)配置   多核心的概念 多核心说白了就是多索引库.也可以理解为多个"数据库表" 说一下使用multicore的真实场景,比若说,产品搜索和会员信息搜索 ...

  3. 在希望的田野上--生物柴油(Biodiesel)光明的未来

    请看下图: 这是科学家Bernie Tao教授给美国Purdue大学的学生们出的题目"有关大豆.谷物产品的创新竞赛",实质上,就是鼓舞研究.开发及应用生物柴油(Biodiesel) ...

  4. 如何使用MacVim

    如何使用MacVim 如何使用MacVim 如何使用MacVim呢? 命令模式 按下ESC 高效率移动 1.在插入模式之外 基本上来说,你应该尽可能少的呆在插入模式里面,因为在插入模式里面 VIM 就 ...

  5. Hive中Bucket的应用

    网友南京-李先森给了他收集的一些资料,如下: Buckets 对指定列计算 hash,根据 hash 值切分数据,目的是为了并行,每一个 Bucket 对应一个文件.如将 user 列分散至 32 个 ...

  6. MVC 4 插件化架构简单实现

    转ASP.NET MVC 4 插件化架构简单实现-思路篇   用过和做过插件的都会了解插件的好处,园子里也有很多和讨论,但大都只些简单的加载程序集什么的,这里主要讨论的就是使用 ASP.NET MVC ...

  7. [置顶] 实现360度全景图像的利器--PanoramaGL

    传送门 ☞轮子的专栏 ☞转载请注明 ☞ http://blog.csdn.net/leverage_1229 介绍 本指南将介绍一个PanoramaGL 0.1类库的简单用法,更多的细节请签出 Hel ...

  8. NuGet的本地服务器安装与Package的发布

    NuGet的本地服务器安装与Package的发布 主要的步骤是按照下面的例子来做的: NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 ...

  9. jQuery Easing 动画效果扩展

    jQuery API提供了简单的动画效果如淡入淡出以及自定义动画效果,而今天我给大家分享的是一款jQuery动画效果扩展增强插件jquery.easing.js,使用该插件可以实现直线匀速运功.变加速 ...

  10. BlackBerry Phonegap项目的搭建

    前言 事实上,这称不上是搭建,因为整个项目依旧是phonegap包里的例子项目,是使用ant来构建的. 准备材料: 1. JDK(不是java系的童鞋请自觉离开) 2. Apache ant http ...