Dot-Net

自定義 SQL 函式和程式碼優先 (EF 4.1)

  • June 26, 2015

我正在使用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 函式,因為您的數據庫是由您的模型(程式碼)定義並由實體框架生成的。

引用自:https://stackoverflow.com/questions/5526422