函式及函式參數 (中繼資料)
函式是執行動作以及以值形式傳回該動作之結果的常式。 System.Data.Metadata.Edm 命名空間提供的類別可公開 實體架構 內定義的標準函式以及基礎儲存區提供者或資料庫內定義的儲存區特有函式。
標準函式會定義在 實體架構 的概念模型中。 這些函式可反映最常用的存放區特有函式。 例如,概念模型中有一個函式稱為 Edm.Max,而在儲存體模型中,有一個函式稱為 SqlServer.Max。 在 實體 SQL 查詢內使用標準函式時,將會在儲存區提供者上呼叫適當的函式。 如需 實體架構 中標準函式的詳細資訊,請參閱標準函式 (Entity SQL)。
您可以使用 EdmFunction 類別來擷取有關概念模型中定義之標準函式以及基礎儲存區提供者或儲存體模型內定義之函式的資訊。
System.Data.Metadata.Edm.MetadataWorkspace.GetFunctions(System.String,System.String,System.String) 方法也可讓您擷取特定函式的所有多載。
下列程式碼範例會示範如何從連接中取得中繼資料工作空間,然後使用該中繼資料工作空間來擷取有關概念模型中 Count 標準函式以及儲存體模型內之基礎儲存區提供者所提供之 COUNT 函式的資訊。 請注意,中繼資料工作空間是一個執行階段服務元件,它會提供用來擷取中繼資料的支援。
此程式碼範例會使用使用 AdventureWorks 物件模型 (EDM) 中指定的應用程式組態字串來連接 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