本主题介绍有关列表视图如何提供数据访问的几种方式。请注意,选择正确的方式对于实现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. 文件合并工具DiffMerge发布4.2版本

    DiffMerge一直是文件对比合并工具的佼佼者,其最大特点是多文件对比与合并,并提供可视化界面用于编辑. 此次DiffMerge v4.2发布,提高了文件差异对比,并提供了快速匹配功能,以及更好的用 ...

  2. 告别alert,拥抱console

    记得学习javascript的第一个demo就是alert("Hello  World");可是学习接触javascript这么长时间了还是在alert,因为javascript调 ...

  3. Mysql高级之权限检查原理

    原文:Mysql高级之权限检查原理 用户进行数据库操作分为两步: 1 是否有权限连接,根据host,name,password: 2 是否有权限进行CURD: 图示解说: 关于用户权限在哪里进行存放? ...

  4. Mysql插入内容过长(Packet for query is too large)

    原文:Mysql插入内容过长(Packet for query is too large) 这个以前一直没有碰到过,一次性向Mysql数据库插入内容过长的话会出现这个问题,解决办法就是在Mysql配置 ...

  5. Android项目---LayoutParams

    LinearLayout.LayoutParams extends ViewGroup.MarginLayoutParams java.lang.Object    ↳ android.view.Vi ...

  6. ASP.NET MVC IOC 之AutoFac

    ASP.NET MVC IOC 之AutoFac攻略 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌似更为普遍,于是捯饬了两天, ...

  7. wcf消息模式(随记)

    ----------------------------------------------消息模式:1.request\reply(默认)2.one-way(单工)[Isoneway=true]客户 ...

  8. ASP.NET MVC + 百度富文本编辑器 + EasyUi + EntityFrameWork 制作一个添加新闻功能

    本文将交大伙怎么集成ASP.NET MVC + 百度富文本编辑器 + EasyUi + EntityFrameWork来制作一个新闻系统 先上截图: 添加页面如下: 下面来看代码部分 列表页如下: @ ...

  9. c#生成word文档

    参考:http://blog.163.com/zhouchunping_99/blog/static/7837998820085114394716/ 生成word文档 生成word文档 view pl ...

  10. 在线预览PDF

    FlexPaper+SWFTool+操作类=在线预览PDF   引言 由于客户有在线预览PDF格式的需求,在网上找了一下解决方案,觉得FlexPaper用起来还是挺方便的,flexpaper是将pdf ...