Freigeben über


Funktionen und Funktionsparameter (Metadaten)

Funktionen sind Routinen, die eine Aktion ausführen und das Ergebnis der Aktion als Wert zurückgeben. Der System.Data.Metadata.Edm-Namespace stellt Klassen bereit, um die im Entity Framework definierten kanonischen Funktionen sowie die im zugrunde liegenden Speicheranbieter bzw. der Datenbank definierten speicherspezifischen Funktionen verfügbar zu machen.

Kanonische Funktionen werden im konzeptionellen Modell im Entity Framework definiert. Diese Funktionen spiegeln die gängigsten speicherspezifischen Funktionen wieder. Beispielsweise besteht im konzeptionellen Modell eine Funktion mit dem Namen Edm.Max und im Speichermodell eine Funktion mit dem Namen SqlServer.Max. Wenn in einer Entity SQL-Abfrage kanonische Funktionen verwendet werden, wird die entsprechende Funktion vom Speicheranbieter aufgerufen. Weitere Informationen über kanonische Funktionen im Entity Framework finden Sie unter Kanonische Funktionen (Entity SQL).

Sie können mithilfe der EdmFunction-Klasse Informationen über die im konzeptionellen Modell definierten kanonischen Funktionen und die im zugrunde liegenden Speicheranbieter bzw. Speichermodell definierten Funktionen abrufen.

Die System.Data.Metadata.Edm.MetadataWorkspace.GetFunctions(System.String,System.String,System.String)-Methode ermöglicht zusätzlich das Abrufen aller Überladungen einer bestimmten Funktion.

Im folgenden Codebeispiel wird das Abrufen eines Metadaten-Arbeitsbereichs von der Verbindung und die anschließende Verwendung dieses Metadaten-Arbeitsbereichs zum Abrufen von Informationen über die kanonischen Count-Funktionen aus dem konzeptionellen Modell sowie die COUNT-Funktionen, die vom zugrunde liegenden Speicheranbieter im Speichermodell bereitgestellt werden. Beachten Sie, dass vom Metadaten-Arbeitsbereich Unterstützung zum Abrufen von Metadaten als Laufzeitdienstkomponente verfügbar gemacht wird.

Im Codebeispiel wird die in Verwendung des AdventureWorks-Objektmodells (EDM) angegebene Verbindungszeichenfolge der Anwendungskonfiguration verwendet, um eine Verbindung mit der "AdventureWorks"-Datenbank herzustellen.

using System;
using System.Data;
using System.Data.EntityClient;
using System.Collections.ObjectModel;
using System.Data.Metadata.Edm;

class GetFunctionsExample
{
  static void Main()
  {
    try
    {
      // Establish a connection to the underlying data provider by
      // using the connection string specified in the config file.
      using (EntityConnection connection = 
           new EntityConnection("Name=AdventureWorksEntities"))
      {
         // Open the connection.
         connection.Open();

        // Access the metadata workspace.
        MetadataWorkspace workspace = 
             connection.GetMetadataWorkspace();

        // Get functions from the conceptual model.
        GetFunctionsFromModel(workspace, DataSpace.CSpace, 
                     "Count", "Edm");

        // Get functions from the storage model.
        GetFunctionsFromModel(workspace, DataSpace.SSpace,
                    "COUNT", "SqlServer");
      }
    }
    catch (MetadataException exceptionMetadata)
    {
        Console.WriteLine("MetadataException: {0}", 
                            exceptionMetadata.Message);
     }
     catch (System.Data.MappingException exceptionMapping)
     {
         Console.WriteLine("MappingException: {0}",
                          exceptionMapping.Message);
      }
  }

  public static void GetFunctionsFromModel(MetadataWorkspace workspace,
        DataSpace model, string functionName, string namespaceName)
  {
     // Get a collection of EdmFunctions by using the 
     // specified function name, the namespace name and the model.
     ReadOnlyCollection<EdmFunction> functions =
           workspace.GetFunctions(
           functionName, namespaceName,
           model);

     // Iterate through the collection to get each function.
     foreach (EdmFunction function in functions)
     {
         Console.WriteLine("\nFunction Name: {0}",
                          function.FullName);

         // Check whether the current function 
         // has any parameter.
         if (function.Parameters.Count != 0)
         {
             Console.Write("Parameters: ");
             // Iterate through the collection to get 
             // each function parameter.
             foreach (FunctionParameter parameter in
                                    function.Parameters)
             {
                Console.WriteLine(
                      "\t Parameter Name: {0}",
                      parameter.Name);
              }
         }
      }
  }
}
Imports System
Imports System.Data
Imports System.Data.EntityClient
Imports System.Data.Metadata.Edm
Imports System.Collections.ObjectModel

Class GetFunctionsExample
  Public Shared Sub Main()
    Try
      ' Establish a connection to the underlying data provider by 
      ' using the connection string specified in the config file.
      Using connection As EntityConnection = _
         New EntityConnection("Name=AdventureWorksEntities")

        ' Open the conection.
        connection.Open()

        ' Access the metadata workspace.
        Dim workspace As MetadataWorkspace = _
          connection.GetMetadataWorkspace

        ' Get functions from the conceptual model.
        GetFunctionsFromModel(workspace, DataSpace.CSpace, _
           "Count", "Edm")

        ' Get functions from the storage model.
        GetFunctionsFromModel(workspace, DataSpace.SSpace, _
            "COUNT", "SqlServer")
      End Using
    Catch exceptionMetadata As MetadataException
       Console.WriteLine("MetadataException: {0}", _
          exceptionMetadata.Message)
    Catch exceptionMapping As MappingException
       Console.WriteLine("MappingException: {0}", _
          exceptionMapping.Message)
     End Try
  End Sub

  Public Shared Sub GetFunctionsFromModel( _
    ByVal workspace As MetadataWorkspace, ByVal model As DataSpace, _
    ByVal functionName As String, ByVal namespaceName As String)

    ' Get a collection of EdmFunctions by using the 
    ' specified function name, the namespace name and the model.
    Dim functions As ReadOnlyCollection(Of EdmFunction) = _
        workspace.GetFunctions(functionName, namespaceName, model)

    ' Iterate through the collection to get each function.
    Dim functionEdm As EdmFunction
    For Each functionEdm In functions
       Console.WriteLine(ControlChars.Lf & "Function Name: {0}", _
         functionEdm.FullName)

       ' Check whether the current function 
       ' has any parameter.
       If (functionEdm.Parameters.Count <> 0) Then
          Console.Write("Parameters: ")
          ' Iterate through the collection to get 
          ' each function parameter.
          Dim parameter As FunctionParameter
          For Each parameter In functionEdm.Parameters
             Console.WriteLine(ControlChars.Tab & _
                " Parameter Name: {0}", parameter.Name)
          Next
       End If
    Next
  End Sub
End Class

Siehe auch

Konzepte

Metadatentyp-Hierarchie