3

大家好 使用EF4,我可以通過使用一個小代碼段將EDMX函數(使用「從數據庫更新模型」和從列表中添加存儲過程)映射到linq方法這樣從LINQ調用存儲過程(帶有dbcontext)

[EdmFunction("MYPROJECT.Store", "Foo")] 
public Decimal Foo(Int32 Id) 
{ 
    throw new NotSupportedException("Not direct access possible, use with E-SQL or LINQ"); 
} 

但這似乎不能與EF 4.1

我看到存儲過程不使用代碼的第一部作品的工作。 我正在使用DbContext,這是正常的,我不能這樣做?

如果是,我該如何讓我的存儲過程工作?

感謝的提前通過:-)

+0

使用數據庫優先或模型優先的方法。不幸的是,這似乎是目前唯一的選擇:-( – 2011-04-20 15:43:32

+0

問題可能是愚蠢的,但是,我從數據庫創建edmx並添加dbcontext代碼生成。我是數據庫第一,對嗎? – eka808 2011-04-20 16:07:50

+0

是的,但'DbContext'是一個代碼優先的事情 - 所以你似乎有一個奇怪的數據庫優先和代碼優先的混合... – 2011-04-20 17:07:32

回答

1

這僅僅是EDMX相關的功能,並與的DbContext API代碼首先/流利的API沒有EDMX你不能使用它。順便說一句。您的意思是SQL函數,而不是存儲過程,因爲導入的存儲過程導致函數導入,並且無法在Linq查詢中調用。標記爲EdmFunction的方法聲明用於導入的SQL函數和模型定義的函數。

是的我知道,SQL函數出現在導入嚮導中的存儲過程分支下,但這只是EDMX設計器的「特性」。

由於您使用的是數據庫優先的DbContext API和EDMX文件,您應該可以毫無問題地使用EdmFunction。我只是測試它。問題可能是您的代理方法標記爲EdmFunction屬性不是靜態的 - 它必須是靜態的。

+0

感謝您的回覆我試圖做一個新的項目具有相同的結構:一個EDMX文件(更新與表一個udb函數來自sql server db),一個dbcontext和一個聲明爲udf的代理方法,當我從linq調用這個方法時,這是被調用的代理方法(我得到一個異常)。試過併成功解決了我的問題,你能給我一個代碼片段嗎?先謝謝了:) – eka808 2011-04-21 08:43:50

+0

你有什麼異常?您是否也嘗試過使用ObjectContext API的相同功能?我的筆記本電腦上沒有代碼。 – 2011-04-21 09:43:25

+0

我得到這一個:拋出新的NotSupportedException(「不直接訪問可能,使用E-SQL或LINQ」); 只是爲了測試,我刪除了EdmFunction行,並且像這樣的所有作品都可以用於任何事情。是的,我試着用objectcontext和所有工作正常 – eka808 2011-04-21 10:01:57