Как извлечь только хранимые процедуры из MetadataWorkspace? - PullRequest
3 голосов
/ 22 февраля 2011

Ребята, есть ли способ извлечь только хранимых процедур из модели хранилища (SSDL) MetadataWorkspace?

В настоящее время я использую следующий код для извлечения хранимых процедуриз MetadataWorkspace (я проверяю BuiltInAttribute объекта EdmFunction):

public static List<EdmFunction> TryGetSsdlFunctions( this MetadataWorkspace metadataWorkspace )
{
    List<EdmFunction> functions = new List<EdmFunction>();

    foreach ( EdmFunction function in metadataWorkspace.GetItems<EdmFunction>( DataSpace.SSpace ) )
    {
        MetadataProperty builtInAttribute = function.MetadataProperties.FirstOrDefault( p => p.Name == "BuiltInAttribute" );
        if ( builtInAttribute != null && Convert.ToBoolean( builtInAttribute.Value.ToString() ) == false )
        {
            functions.Add( function );
        }
    }

    return functions;
}

Проблема здесь в том, что кроме хранимых процедур это вернет все функции , включенные в модель данныхтоже.И я хочу только хранимые процедуры.Я вижу, что существуют различия в значении атрибута IsComposable, но я не уверен, является ли это надежным критерием.

Заранее спасибо.

ps: Если вы считаете, что есть более разумный способдля извлечения хранимых процедур из рабочей области, пожалуйста, поделитесь.

Ответы [ 2 ]

1 голос
/ 21 апреля 2016

Мне недавно тоже нужно было это выяснить.Атрибут IsComposable должен использоваться для определения того, является ли EdmFunction хранимой процедурой или пользовательской функцией.

EdmFunction.IsComposableAttribute Свойство

Получает или задает, является ли этоЭкземпляр сопоставляется с функцией или хранимой процедурой.

Значение свойства

Тип: System.Boolean

true если этот экземпляр сопоставлен с функцией; false , если этот экземпляр сопоставлен с хранимой процедурой.

Информация о версии

.NET Framework

Доступно с 4.5

https://msdn.microsoft.com/en-us/library/system.data.metadata.edm.edmfunction.iscomposableattribute(v=vs.110).aspx

(Я знаю, что это старый вопрос, но это лучший результат в Google, когда я искал ответ. Может быть, это поможет кому-то еще.)

1 голос
/ 23 февраля 2011

А как насчет этого варианта?

public static List<EdmFunction> TryGetSsdlFunctions( this MetadataWorkspace metadataWorkspace ) { 
  List<EdmFunction> functions = (from func in metadataWorkspace.GetItems<EdmFunction>(DataSpace.SSpace) )
                                where func.ReturnParameter == null
                                select func).ToList();
  return functions;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...