2017-07-14 112 views
0

我正在維護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博客,命名空間看起來是正確的

enter image description here

有何建議?謝謝

+0

你是個例外,表示沒有東西可以直接調用該方法。 這讓我懷疑沒有方法直接調用該方法,甚至可能是整個庫,因此編譯器在構建到解決方案時不包含該引用,因爲它認爲它忽略了未使用的引用而「優化」了輸出。 你可以嘗試創建一個硬引用,所以你肯定知道編譯器不會忽略它嗎?例如創建一個名爲test的公共屬性,然後在您的主項目中獲取一次該值,以便代碼至少觸及一次並確保程序集已加載?上面的 –

+0

我說編譯器忽略它,但這不是準確的,因爲DLL仍然會包含在輸出中。這更多的是我正在討論裝配從未加載的運行時可視化。只是想澄清:) –

+0

這可能是一個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

回答

0

這裏的問題是你有一個與你的命名空間衝突的引用。

System.Data.Metadata.Edm命名空間包含一個名爲EdmFunction的類。 System.Data.Objects.DataClasses命名空間包含一個名爲EdmFunctionattribute的類(這是您嘗試使用的類)。

出於某種原因,您的代碼正在引用EdmFunction類。嘗試刪除System.Data.Metadata.Edm的名稱空間導入,因爲您可能不想首先導入該名稱空間。