2011-02-22 14 views
3

夥計們,有沒有辦法從MetadataWorkspace的存儲模型(SSDL)中提取只有存儲過程?如何從MetadataWorkspace中僅提取存儲過程?

目前,我使用下面的代碼從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:如果您認爲從工作區提取存儲過程有更明智的方法,請分享。

回答

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; 
} 
+0

我認爲這可行(至少在第一眼)謝謝。 – regnauld

0

我最近還需要找出這個。應該使用IsComposable屬性來確定EdmFunction是否是存儲過程或用戶定義的函數。

EdmFunction.IsComposableAttribute物業

獲取或設置此實例是否被映射到一個函數或存儲過程。

屬性值

類型:System.Boolean

如果此實例映射到一個功能; false如果此實例映射到存儲過程。

版本信息

.NET框架

可用自4.5

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

(我知道這是一個老問題,但是這是在谷歌上的結果當我正在尋找答案時,也許這會幫助別人。)