EPR类企业管理系统

在我们现有系统基础上或全新开发,提供定制服务
为您的企业高效快速实施ERP,WMS,MES,CRM管理系统
全面管控物料仓库、销售业务、采购业务、仓库业务
生产过程、质量检验、组织架构、业务报表


定制
QQ:460-3528

开发
QQ群:3360-90194

源码
微信:136-3650-3721

服务器,ServerView,InstantFeedback和InstantFeedbackView模式

本文扩展了“列表视图数据访问模式”主题,并详细介绍了Server,ServerView,InstantFeedback和InstantFeedbackView模式的行为。

共同特点

  • 所有这些模式都支持eXpress持久对象(XPO),服务器InstantFeedback模式也支持实体框架(EF)。
  • 一个列表视图不必所有的对象同时访问ListView.CollectionSource的类型。仅将当前可见的那些对象按需加载为一小部分。假定出现新的可见对象的每个操作(滚动,分页,分组,排序)都需要其他数据请求。
  • 如果您有一个定制的Controller访问列表视图的List Editor的控件以执行定制的排序或分组,则Controller可能不再起作用,因为数据库服务器执行了分组和排序。自定义摘要也在服务器端计算。
  • ServerViewInstantFeedbackView模式下,列表编辑器不会显示非持久属性值。要显示它们,请将PersistentAliasAttribute应用于这些属性。
  • 列表编辑器不支持具有非持久属性的筛选,排序和分组操作。要启用这些操作,请将PersistentAlias(XPO)或CalculatedAttribute(EF)属性应用于这些属性。
  • ServerViewInstantFeedbackInstantFeedbackView模式不支持嵌入式编辑。如果原始对象被修改,则在您提交更改并重新加载集合之前,该对象不会显示在列表视图中。

    例如,当动作更改对象的属性值时,该对象的实例由单独的数据库请求创建,并且在您提交更改之前该属性值的修改不会显示在网格上(或者如果设置了BaseObjectSpace.CommitChanges属性,则该更改会自动发生为true)。

  • 支持这些模式的控件不能完全访问基础数据,也不能在客户端上启动筛选,排序和分组操作。这些操作被委托给基础的ORM(实体框架或XPO),该ORM构造适当的SQL语句并向SQL Server执行查询,以检索应立即显示给用户的一小部分数据。您不能针对非持久属性对数据进行过滤,排序和分组-无法针对仅存在于客户端的运行时值构建SQL查询,并在数据库服务器上执行该查询。如果属性是非持久性的,则将禁用筛选,分组和排序操作。

  • 如果要使这些模式之一显示嵌套的列表视图,请确保基础集合的getter中没有用于排序,筛选或其他任何逻辑,并且该集合的事件没有订阅者。由于将创建一个独立的服务器集合而不是原始集合,因此不会考虑此逻辑和订阅者。
  • IModelListView.DataAccessMode选项设置为该ListView模型的ServerServerViewInstantFeedbackInstantFeedbackView时,将创建一个独立的服务器模式集合作为查找ListView的数据源。但是,当DataSourcePropertyAttribute将应用于查找属性,将属性中指向的属性用作查找数据源,并且不会创建也不使用独立的独立服务器模式集合。原因是数据源属性getter包含在客户端计算的逻辑,并且当查找编辑器请求显示对象时,数据源由客户端应用程序填充。因此,ServerServerViewInstantFeedbackInstantFeedbackView模式选项和DataSourceProperty属性不能同时工作。

  • 如果您使用的表具有主复合键的旧数据库,则不能使用此类表在ServerServerViewInstantFeedbackInstantFeedbackView模式下提供数据。
  • OpenObjectController.OpenObject行动是无效的ServerViewInstantFeedbackInstantFeedbackView模式。

服务器和ServerView模式的特殊性

  • 服务器模式支持就地编辑
  • 当前有两个内置的列表编辑器支持服务器模式:GridListEditor(默认在WinForms应用程序中使用)和ASPxGridListEditor(在ASP.NET Web应用程序中默认使用)。该的ServerView模式与WinForms的兼容GridListEditor只。
  • ServerView模式下,View.CurrentObjectView.SelectedObjects属性返回ObjectRecord对象,而不是原始业务对象。若要获取真实的对象,请使用IObjectSpace.GetObject方法。
  • 数据感知操作(分组,排序等)由数据库服务器同步执行,并且在处理大量对象时显着提高了列表视图的性能。在这些模式下,将在需要时计算所有属性(仅在GridView中可见,并且在外观,安全性规则等中使用)。
提示

ServerView是最快的同步数据访问模式。

InstantFeedback和InstantFeedbackView模式的特殊性

  • 这些模式仅与WinForms GridListEditor兼容,WinForms应用程序中默认使用这些模式。
  • View.CurrentObjectView.SelectedObjects属性返回ObjectRecord对象,而不是原来的业务对象。若要获取真实的对象,请使用IObjectSpace.GetObject方法。
  • 数据感知操作在后台线程中异步执行,并且控件在检索数据的同时继续响应用户的操作。
  • InstantFeedback模式下,可以在OnLoading()AfterConstruction()方法中实现自定义逻辑。
  • 在XPO中,CollectionSourceBase.DisplayableProperties集合包含所有可见属性的名称以及XPInstantFeedbackSource.DisplayableProperties中列出的属性。UI中隐藏但在CollectionSourceBase.DisplayableProperties中列出的属性在getter中可能具有复杂的逻辑,这需要大量的数据库请求。此行为可能会导致性能问题。您可以使用XPObjectSpace.InstantFeedbackMappingMode 属性更改默认行为。
  • 在EF中,CollectionSourceBase.DisplayableProperties集合仅包含可见属性的名称。
  • 如果外观/安全性规则或PersistentAlias / Calculated属性的表达式使用的不是CollectionSourceBase.DisplayableProperties集合中的属性,则列表视图会发出其他数据库请求。为了避免过多的请求,请将这些属性添加到CollectionSourceBase.DisplayableProperties中。您可以访问此集合中列出的所有属性,而无需其他请求。
  • 排序,分组和过滤时,参考属性将自动由相应参考对象的默认属性替换。例如,在“联系人列表”视图中,使用Contact.Department.Title属性代替了Contact.Department
  • 如果将实体框架用作ORM系统和InstantFeedback数据访问模式,请按照“代码和UI中的实体之间的关系”的“聚合实体的级联删除”部分中的描述,实现聚合集合的级联删除。
提示

InstantFeedbackView是最快的异步数据访问模式。

相关文章

转载保留此链接,注明出处