Dot-Net
自定義 SQL 函式和程式碼優先 (EF 4.1)
我正在使用Entity Framework 4.1 RC和程式碼優先方法。 如何呼叫自定義 SQL 函式?
如果我使用EdmFunction屬性,我應該指定什麼命名空間?
[EdmFunction("Namespace", "GetAge")] public static int GetAge(Person p) { throw new NotSupportedException(…); }當我嘗試使用此類函式執行 LINQ 查詢時,會引發以下異常:
類型“…”的指定方法“…”無法轉換為 LINQ to Entities 儲存表達式。
如果要呼叫 SQL 函式,則必須執行自定義 SQL 查詢。為此,請使用 context.Database.SqlQuery。實體框架支持儲存過程的映射,但 DbContext API (EF 4.1) 不支持此功能。如果要呼叫儲存過程,則必須再次使用 context.Database.SqlQuery。儲存過程永遠不能在 Linq 查詢中使用。
EdmFunction是 ObjectContext API 和實體設計器的功能。命名空間設置為 EDMX 文件中定義的命名空間。使用程式碼優先時,您沒有 EDMX 文件,也無法定義函式映射。順便提一句。如果您遵循程式碼優先的方法,您不應該有任何儲存過程或 SQL 函式,因為您的數據庫是由您的模型(程式碼)定義並由實體框架生成的。