[英]Custom Functions with Entity Framework
如何在實體框架中使用自定義函數? 我正在嘗試使用實體框架調用模型定義的函數。 我使用.Net Framework 4.5,正在以XML打開實體模型(.edmx)文件。 我在“ edmx:StorageModels”部分中添加了以下代碼:
<Function Name="YearsSinceNow" ReturnType="int">
<Parameter Name="date" Type="datetime" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(date)
</DefiningExpression>
</Function>
</Schema></edmx:StorageModels>
我收到錯誤“無法識別的架構元素:DefiningExpression”。 我也嘗試在edmx:ConceptualModels部分中應用此代碼。 我有一個錯誤“無法識別的架構元素功能”
嘗試按以下方式更改定義(在概念模型而不是存儲模型中定義):
從這里取
<Function Name="YearsSinceNow" ReturnType="Edm.Int32">
<Parameter Name="date" Type="Edm.DateTime" />
<DefiningExpression>
Year(CurrentDateTime()) - Year(date)
</DefiningExpression>
</Function>
接下來,將以下方法添加到您的應用程序中,並使用EdmFunctionAttribute將其映射到類似於以下內容的概念模型函數:
[EdmFunction("MyModelName", "YearsSinceNow")]
public static int YearsSinceNow(DateTime date)
{
throw new NotSupportedException("Direct calls are not supported.");
}
向您的應用程序添加一個公共語言運行時(CLR)方法,該方法映射到概念模型中定義的功能。 若要映射該方法,必須將EdmFunctionAttribute應用於該方法。 請注意,屬性的NamespaceName和FunctionName參數分別是概念模型的名稱空間名稱和概念模型中的函數名稱。 LINQ的函數名稱解析區分大小寫。
對於Function元素,可以將其添加到.edmx文件的Conceptual Model Content部分的Schema元素中,以定義自定義函數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.