Fonctions et paramètres de fonctions (Métadonnées)
Les fonctions sont des routines qui effectuent une action et retournent le résultat de cette action sous la forme d'une valeur. L'espace de noms System.Data.Metadata.Edm fournit des classes pour exposer les fonctions canoniques définies dans Entity Framework, ainsi que les fonctions spécifiques aux magasins définies dans le fournisseur de stockage ou la base de données sous-jacents.
Les fonctions canoniques sont définies dans le modèle conceptuel d'Entity Framework. Ces fonctions reflètent les fonctions spécifiques aux magasins les plus couramment utilisées. Par exemple, il existe une fonction appelée Edm.Max dans le modèle conceptuel et SqlServer.Max dans le modèle de stockage. Lorsque des fonctions canoniques sont utilisées dans une requête Entité SQL, la fonction appropriée est appelée sur le fournisseur de stockage. Pour plus d'informations sur les fonctions canoniques d'Entity Framework, voir Fonctions canoniques (Entity SQL).
Vous pouvez utiliser la classe EdmFunction pour récupérer les informations relatives aux fonctions canoniques définies dans le modèle conceptuel et les fonctions définies dans le fournisseur de stockage ou le modèle de stockage sous-jacents.
La méthode System.Data.Metadata.Edm.MetadataWorkspace.GetFunctions(System.String,System.String,System.String) vous permet également de récupérer toutes les surcharges d'une fonction spécifique.
L'exemple de code suivant montre comment obtenir un espace de travail des métadonnées à partir d'une connexion, puis utiliser cet espace pour récupérer les informations relatives aux fonctions canoniques Count du modèle conceptuel et les fonctions COUNT fournies par le fournisseur de stockage sous-jacent du modèle de stockage. Notez que l'espace de travail des métadonnées, en tant que composant de service du runtime, fournit une prise en charge de la récupération des métadonnées.
L'exemple de code utilise la chaîne de configuration d'application spécifiée dans Utilisation du modèle objet AdventureWorks (EDM) pour établir une connexion à la base de données AdventureWorks.
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