Использование Kentico 7 API через консольное приложение
У меня есть следующее, используя 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 ответа
Конечно, можно использовать API Kentico вне самого Kentico. Недавно я опубликовал статью на эту тему. Тем не менее, статья демонстрирует возможность новой версии Kentico. Но вернемся к вашей проблеме...
CMS.CMSHelper.CMSContext.Init();
Метод ожидает, что строка соединения с именем "CMSConnectionString" существует в вашем app.config или web.config.
В документации также говорится
Вы можете вызвать этот метод в любой точке жизненного цикла вашего приложения, но это должно произойти до того, как вы начнете использовать любой другой API Kentico CMS.
так что ты не должен касаться CMS.DataEngine
или любой другой CMS.*
пространство имен, прежде чем позвонить CMSContext.Init()
, После вызова этого метода вы можете начать использовать перегрузку без параметров ConnectionHelper.GetConnection()
но я бы посоветовал вам воспользоваться преимуществами шаблона Info-Provider, который предлагает Kentico, вместо использования прямого доступа к БД через CMS.DataEngine
,
Например, вот как вы удаляете пользователей:
// Get the user
UserInfo deleteUser = UserInfoProvider.GetUserInfo("MyNewUser");
// Delete the user
UserInfoProvider.DeleteUser(deleteUser);
Если для выполнения вашей задачи нет особой необходимости создавать консольное приложение, я бы рекомендовал избегать консольного приложения и вместо этого создавать настраиваемые запланированные задачи.
Вы можете написать код, который должна выполнить ваша задача, в папке App_Code вашего проекта - или в проекте CMSAppCode, если вы используете тип проекта веб-приложения. Таким образом, вам не нужно беспокоиться о том, чтобы иметь доступ к базе данных или ссылаться на все библиотеки DLL, которые вам понадобятся для использования Kentico API.