【问题标题】:Sitecore DataProvider with multiple tables具有多个表的 Sitecore DataProvider
【发布时间】:2015-05-28 15:03:11
【问题描述】:
我一直在阅读多个 Sitecore DataProvider 在单个数据库和单个表上实现的示例(使用配置文件参数来指定尝试与之集成的特定表和列)。只是想知道是否可以实现在多个表上工作的数据提供程序,而不仅仅是一个。找不到任何关于此的示例,只是询问任何想法或可能性。
当我尝试处理多个表时遇到的第一个问题是重写 GetItemDefinition 方法。由于此方法仅返回一个项目定义,并且需要知道它将从哪个特定表中获取项目信息。 (如果只处理一张表,则在配置文件中指定)。基本上我正在寻找一种在表之间(动态)切换而无需每次都更改配置文件参数的方法。
【问题讨论】:
标签:
c#
.net
sitecore
sitecore7
dataprovider
【解决方案1】:
如果您要创建自定义数据提供程序,那么实现完全由您决定。如果您一直在关注一些示例,例如Northwind Dataprovider,那么正如您所说,该实现作用于配置中指定的单个数据库。但是您可以在您实现的方法中指定您需要的任何内容,并运行逻辑来切换您在GetItemDefinition() 和GetItemFields() 等方法中调用的select 语句。您可以在 Northwind 示例中看到 SQL 查询是动态构建的:
StringBuilder sqlSelect = new StringBuilder();
sqlSelect.AppendFormat("SELECT {0} FROM {1}", nameField, table);
如果您正在构建一个只读数据提供程序,那么您可以使用SQL Views,允许您编写一个查询以使用UNION operator 组合来自多个表的结果。只要每条记录都有跨表的唯一 ID(即,如果您使用 GUID 作为 ID),那么这应该可以正常工作。