2011-02-22 4 views
3

皆さん、のMetadataWorkspaceのストレージモデル(SSDL)からのストアドプロシージャを抽出する方法はありますか?現在MetadataWorkspaceからストアドプロシージャのみを抽出する方法は?

、私は(私はEdmFunctionオブジェクトのBuiltInAttributeをチェックしています)MetadataWorkspaceからストアドプロシージャを抽出するために、次のコードを使用しています:

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 Framework 4.5

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

(私はこれが古い質問ですけど、これがGoogleで上位の結果であるため、利用可能な

私が答えを探していたときに、他の人に役立つかもしれません)

関連する問題