业务规则引擎中的数据访问

规则引擎本身只支持 .NET 对象。 若要处理来自数据库的数据,则可直接使用 ADO.NET 对象,但该引擎还提供了某些助手类以简化根据规则使用数据库数据的过程。 规则引擎通过公开三种与数据库相关的类型来扩展其支持: TypedDataRowTypedDataTableDataConnection。 本部分将介绍这些助手类,提供有关每种类型应在何时使用的建议,以及讨论在使用这些类时对性能所造成的影响。

助手类如下所示:

  • TypedDataRow。 通过使用对 ADO.NET DataRow 实例的引用构造。 对于仅处理来自特定表中的一行或少量行的数据的规则, TypedDataRow 是一个明显的选择。

  • TypedDataTable。 字面上是 TypedDataRow 对象的集合。 数据库表中的每一行将包装为 TypedDataRow ,并由规则引擎断言到工作内存中。

    TypedDataTable 需要内存中 ADO.NET DataTable,如果此特定数据表包含大量行,则可能会造成性能开销。 如果数据库表中的行数较少,并且可以在调用规则之前确定这些行,请使用 DataTable,否则使用 TypedDataRow。假设 DataTable 中的大量行与规则相关。

  • DataConnection。 表示通过数据库连接访问的数据库中的表。 DataConnectionTypedDataTable 的区别在于,除了数据集名称和表名称之外,DataConnection 还需要一个可用数据库连接和可选的数据库事务上下文。

    DataConnection 规则中使用的部分或全部谓词将成为针对数据库连接的查询约束的一部分。 从数据库中检索只满足查询约束的行,并供引擎使用。 与在内存中容纳非常大 的 DataTable 相比,此机制提供更好的性能并消耗更少的内存。

本节内容