在.NET开发领域,数据库应用的开发一直是一个重要且复杂的任务。为了简化这一过程,ComponentOne推出了基于Microsoft ADO.NET技术的C1DataObjects工具。C1DataObjects不仅增强了ADO.NET的功能,还通过多种方式优化了数据库应用的开发流程。
C1DataObjects遵循标准的业务对象范式,允许开发者编写可重用的业务逻辑组件,即数据库。这种架构的优势在于,它提供了业务逻辑与表示层(或GUI)的清晰分离。此外,数据库可以在WinForms和WebForms应用程序中使用。
C1DataObjects还提供了创新的虚拟模式技术,非常适合在WinForms应用程序中处理大型数据集。实际上,由于ADO.NET本身无法处理大型数据集,使用C1DataObjects是克服这一限制的唯一方法。
C1DataObjects完全自动化了分布式三层Web应用程序的开发,使开发者无需编写特殊的服务器端代码。为了更好地控制应用程序性能,ComponentOne WebDataObjects for ASP.NET封装了C1DataObjects的功能,并提供了服务器端缓存和对象池的优化。
使用C1DataObjects的最简单的方法是连接到OLE DB数据源,并将其实例结构导入到数据模式中。数据模式由表单上的C1SchemaDef组件表示。该组件提供了访问Schema Designer的途径,用于指定暴露给绑定控件和其他数据消费者的表和字段。Schema Designer的导入向导提示输入连接字符串和登录凭据,然后显示可供导入的表、视图和别名。
导入向导可以连接到任何OLE DB数据源。Schema Designer显示了底层数据库结构和数据集的图形视图,包含以下窗口:
Schema Designer提供了定义数据库结构的图形界面。
每个数据模式必须至少包含一个数据集,这是一个集合,包含表和关系,如它们暴露给数据消费者一样。通常,数据集暴露了底层数据源中可用表的一个子集。C1DataSet组件代表一个数据集,并作为绑定控件的数据源。
以下C1DataSet属性用于将组件与数据模式关联:
SchemaDef - 表单上C1SchemaDef组件的名称。
DataSetDef - 在Schema Designer中定义的数据集的名称。
以下属性用于将绑定控件与C1DataSet组件关联:
DataSource - 表单上C1DataSet组件的名称。
DataMember - 在Schema Designer中定义的表视图的名称。
C1DataObjects的一个关键特性是能够将多个表组合成一个单一的聚合体,作为简单表暴露给数据消费者。复合表类似于通过带有连接的SQL语句形成的数据库视图。然而,使用C1DataObjects,开发者可以在Schema Designer中使用数据库图表指定表和关系,而无需编写SQL。
在Schema Graph窗口中,每个简单表由一个子窗口表示,其中包含一个字段名称列表和复选框。只有选中的字段才会暴露给数据消费者。开发者还可以控制复合表中默认字段名称的顺序,并可以将个别字段指定为只读。
当应用程序尝试修改复合表中的一行时,C1DataObjects会自动收集所有修改的简单表行,并将它们发送到服务器进行更新。
通过在Schema Editor中定义表之间的视图关系,开发者可以在不编写代码的情况下实现绑定控件之间的主-从关系。如果定义了视图关系,绑定控件的DataMember属性将显示代表关系父子部分的额外节点。在运行时,详细控件会自动响应主控件中的行货币更改。
C1DataObjects支持基于涉及其他数据库字段的表达式创建计算字段。对于数据消费者来说,计算字段与本地数据库字段无法区分。
约束表达式用于指定数据库字段更新时的合法值范围。通过在数据模式中放置此类约束,可以将业务逻辑集中并维护在单一位置。
在运行时,无效的数据输入会导致显示指定的错误消息。
推荐使用C1DataObjects的方式是创建一个定义单个模式的数据库项目,然后在多个项目中重用该数据库。注意,WinForms和WebForms项目可以共享相同的数据库。
要在另一个项目中使用数据库,开发者需要添加对数据库程序集的引用,然后将C1DataSet组件的DataLibrary属性设置为程序集文件名(不包括.DLL扩展名)。在这种情况下,不使用SchemaDef属性,因为C1SchemaDef组件位于数据库本身。