从未声明为 'custom table' 的 Kentico 数据库读取 table

Read a table from Kentico database which was not declared as 'custom table'

我的问题很简单。我在 Kentico 9 上工作,它的 SQL 服务器数据库包含几个 tables,它们是由外部承包商直接从 SQL Management Studio 添加的。事实是,那些 table 用于存储将为网站显示的自定义内容,但是,在代码中,它们没有用于进行查询的代码。我的意思是,他们没有 InfoProvider 类.

https://docs.kentico.com/display/K82/Retrieving+database+data+using+ObjectQuery+API

据此,所有进入 Kentico 数据库的 table 都可以通过调用这些 类 上的方法来访问,但我这次没有。

类似这样的东西,如果我使用我的 table 名字,它将不起作用:

var user = UserInfoProvider.GetUserInfo("administrator");
var items = CustomTableItemProvider.GetItems("MyTable")
.TopN(10)
.WhereEquals("ItemCreatedBy", user.UserID)
.OrderBy("ItemCreatedWhen");

我的问题是:

我可以通过名称查询任何 table 吗?

最后一件事: 我不能将那些 table 声明为 "custom table",因为它似乎是 CMS 中的错误。

我认为必须在系统中注册一个对象(通过 Kentico UI 或 API 创建)以便通过对象查询从数据库中提取对象。

所以我会选择以下选项之一:

  1. 使用 Entity Framework 或类似的东西来处理该数据
  2. 创建适当的自定义 table 甚至自定义模块并将数据推送到那里。不确定为什么不能创建自定义 table...您遇到的错误是什么?
  3. 如果您只需要在 UI 上显示数据(无需在后端进行处理)- 仅使用自定义查询

希望对您有所帮助。

或者您可以使用自己的 SQL 查询提取数据:

var ds = ConnectionHelper.ExecuteQuery("select ....", null, QueryTypeEnum.SQLQuery);

尽管如此,我还是建议在自定义模块中创建一个自定义 class(比自定义表更强大),并使用生成的 Info 和 InfoProvider classes 来获取和操作数据。

如果您在代码中访问,那么您可以使用老式的好方法。如果您想从数据库中提取数据以显示在网站上,您也可以通过创建 custom query 并使用转换来显示字段,然后在页面上使用转发器来显示转换后的数据。或者,您可以使用带有基本转发器的 SQL 数据源,但您仍然必须创建一个转换来显示数据。这两种方法都允许您从 CMS UI 中访问表中的数据,无需触及任何隐藏的代码。

如果您的 objective 是从这些数据库中读取数据 table 以在网页上进行转换,例如使用 CMS Repeater webpart,您可以简单地在 Kentico 本身中创建自定义查询并使用它加载数据。您可以找到有关如何创建自定义自定义查询和使用它加载数据的详细信息here

另一方面,您也可以编写自定义 类 并定义自定义方法,您可以在其中使用自己的 SQL 查询提取数据,如下所示: var ds = ConnectionHelper.ExecuteQuery("select ....", null, QueryTypeEnum.SQLQuery);

最后,我认为创建自定义 table 而不是那些直接的 DB table 应该没有任何问题,唯一的事情是我们必须确保自定义 [=22= 的代号] 应该是唯一的意味着不要尝试使用完全相同的名称,因为它会由于数据库中已存在相同的 table 名称而导致异常。您可以分享您在创建自定义 table 时遇到的异常,以便我可以进一步帮助您。