Context.CurrentMiningModel возвращает ноль в UDF - PullRequest
2 голосов
/ 02 апреля 2012

Я перенес Mining Structures с сервера 2008 на сервер 2012. Когда я пытаюсь использовать свою CLR UDF (которая отлично работает на SQL Server 2008) в запросе DMX на сервере 2012, я получаю эту ошибку:

Исключение было сгенерировано целью вызова. Ссылка на объект не установлена ​​для экземпляра объекта.

Моей первоначальной целью было запустить метод GetNodeDescription (...) . При отладке проблемы я мог бы изолировать проблему с этим UDF, который не работает на моем SQL-сервере 2012

[SafeToPrepare(true)]
public static string test()
{
  return Context.CurrentMiningModel.Name;
}

Я предполагаю, что CurrentMiningModel является нулем, потому что следующий код работает нормально

[SafeToPrepare(true)]
public static string testUser()
{
 return Context.CurrentConnection.User.Name;
}

Есть идеи, как это решить? Есть ли кто-нибудь, кто может воспроизвести это?

Спасибо.

Jan

UPDATE: Контакт в Microsoft подтвердил это поведение по желанию из-за «Рефакторинга метаданных» (что бы это ни значило ...). Тем не менее, веб-сайт еще не обновлен соответствующим образом.

1 Ответ

0 голосов
/ 24 апреля 2012

Это не окончательный ответ, но это обходной путь, чтобы заставить GetNodeDescription от Microsoft работать (путем явного предоставления модели майнинга):

[SafeToPrepare(true)]  
public static string GetNodeDescription(string MiningModel, string nodeUniqueName)  
{  
  if (Context.ExecuteForPrepare)  
  {
    return string.Empty;  
  }  
  return Context.MiningModels[MiningModel].GetNodeFromUniqueName(nodeUniqueName).Descript‌​ion;  
}
...