我正在維護Visual Studio 2008應用程序(網站項目)。沒有機會升級到更高版本的.NET框架或高版本的實體框架。像許多IT部門一樣,除非有重大問題,否則人們不會允許我對系統進行重大升級。'System.Data.Metadata.Edm.EdmFunction'不是屬性類
.net框架是3.5。而EF版本是1.0
我需要改變我的計劃,所以我選擇LINQ語句將工作
Calling a SQL User-defined function in a LINQ query
正如你所知道的,我需要包括存儲功能的select語句的一部分
所以我複製了聲明。
我已經掙扎了好幾個小時,而且我一直在編譯。
//..various using statement
using System.Data.Objects.DataClasses;
using System.Data.Metadata.Edm;
//..other class
public static class EntityFunctions
{
[EdmFunction("FBLModel.Store", "SampleFunction")]
public static int SampleFunction(int param)
{
throw new NotSupportedException("Direct calls are not supported.");
}
}
我不斷收到編譯錯誤
錯誤CS0246:類型或命名空間名稱「EdmFunctionAttribute」找不到(是否缺少using指令或程序集引用?)
我有找遍了整個互聯網包括計算器和MSDN博客,命名空間看起來是正確的
有何建議?謝謝
你是個例外,表示沒有東西可以直接調用該方法。 這讓我懷疑沒有方法直接調用該方法,甚至可能是整個庫,因此編譯器在構建到解決方案時不包含該引用,因爲它認爲它忽略了未使用的引用而「優化」了輸出。 你可以嘗試創建一個硬引用,所以你肯定知道編譯器不會忽略它嗎?例如創建一個名爲test的公共屬性,然後在您的主項目中獲取一次該值,以便代碼至少觸及一次並確保程序集已加載?上面的 –
我說編譯器忽略它,但這不是準確的,因爲DLL仍然會包含在輸出中。這更多的是我正在討論裝配從未加載的運行時可視化。只是想澄清:) –
這可能是一個T4模板的問題。也許他們屬於錯誤的EF版本?轉到'Model.Context.tt'並檢查是否包含'using System.Data.Objects.DataClasses;'。我從[這篇文章]得到了提示(https://social.msdn.microsoft.com/Forums/en-US/2c8143eb-f7cd-48d1-b67d-9789acd9e152/type-or-namespace-edmfunctionattribute-could-not-被發現的實體框架-601?=論壇adodotnetentityframework)。 – Diana