通过Console App使用Kentico 7 API

时间:2016-01-22 20:58:40

标签: c# kentico

我有以下内容,通过控制台应用程序使用Kentico API 7:

String connectionString = CMS.DataEngine.ConnectionHelper.GetConnectionString("MyConnString");
Console.WriteLine("connectionString ? " + connectionString);
//CMS.DataEngine.GeneralConnection
CMS.DataEngine.GeneralConnection conn = CMS.DataEngine.ConnectionHelper.GetConnection(connectionString);
conn.Open();
Console.WriteLine("connection is open? " + conn.IsOpen());

CMS.CMSHelper.CMSContext.Init();
Console.WriteLine("CurrentSiteID " + CMS.CMSHelper.CMSContext.CurrentSiteID);

连接已打开。我收到错误  Console.WriteLine("CurrentSiteID " + CMS.CMSHelper.CMSContext.CurrentSiteID);

表示连接未初始化。得到了帮助?

2 个答案:

答案 0 :(得分:2)

当然可以在Kentico之外使用Kentico API。最近,我在这个主题上发表了article。但是,这篇文章展示了更新版Kentico的可能性。但回到你的问题......

CMS.CMSHelper.CMSContext.Init();方法期望app.config或web.config中存在名为“CMSConnectionString”的连接字符串。

documentation也说

  

您可以在应用程序生命周期的任何时候调用此方法,但必须在使用任何其他Kentico CMS API之前进行此操作。

因此,在致电CMS.DataEngine之前,您不应该触及CMS.*或任何其他CMSContext.Init()命名空间。 调用该方法后,您可以开始使用无参数重载ConnectionHelper.GetConnection(),但我建议您利用Kentico提供的Info-Provider pattern,而不是通过CMS.DataEngine使用直接数据库访问

例如,这就是delete users

的方式
// Get the user
UserInfo deleteUser = UserInfoProvider.GetUserInfo("MyNewUser");

// Delete the user
UserInfoProvider.DeleteUser(deleteUser);

答案 1 :(得分:0)

除非特别需要创建控制台应用程序来执行任务,否则我建议避免使用控制台应用程序,而是创建自定义scheduled task

如果您正在使用Web应用程序项目类型,则可以在项目的App_Code文件夹中编写您的任务需要执行的代码 - 或者在CMSAppCode项目中编写代码。这样您就不必担心访问数据库或引用使用Kentico API所需的所有DLL。