伙计们,有没有办法从MetadataWorkspace的存储模型(SSDL)中提取仅存储过程?
目前,我使用以下代码从MetadataWorkspace中提取存储过程(我正在检查EdmFunction对象的BuiltInAttribute):
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属性的值存在差异,但我不确定这是否是一个可靠的标准。
提前致谢。
p.s:如果您认为有更智能的方法从工作区中提取存储过程,请分享。
答案 0 :(得分:1)
这个变种怎么样?
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;
}
答案 1 :(得分:1)
我最近也需要找到它。应使用IsComposable属性来确定EdmFunction是存储过程还是用户定义函数。
EdmFunction.IsComposableAttribute Property
获取或设置此实例是映射到函数还是映射到存储过程。
物业价值
类型:System.Boolean
如果此实例映射到函数,则true ;如果此实例映射到存储过程,则 false 。
版本信息
.NET Framework
自4.5以来可用
(我知道这是一个老问题,但这是我在搜索答案时谷歌的最佳结果。也许这会帮助其他人。)