我的程序中有一個實體框架4實體模型。有我在我的SQL定義的存儲功能,任何地方12.0.1數據庫稱爲GuidToPrefix
:在實體框架中使用存儲函數4查詢
CREATE OR REPLACE FUNCTION GuidToPrefix(ID UNIQUEIDENTIFIER) RETURNS INT AS
BEGIN
RETURN CAST(CAST(ID AS BINARY(4)) AS INT)
END;
遵循本MSDN article的方向,我添加功能到我的EDMX:
<Function Name="GuidToPrefix" ReturnType="int" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="DBA">
<Parameter Name="ID" Type="uniqueidentifier" Mode="In" />
</Function>
要完全誠實,我從數據庫更新了模型,並在嚮導的第一個選項卡上的列表中檢查了該函數。我不知道這是否有所作爲,但我不明白爲什麼會這樣。
根據文章,我需要在C#類中添加函數的定義。我的問題是它沒有告訴我要把它放在什麼類中。我添加了一個全新的類嗎?我是否創建一個新的.CS文件並執行如下操作:
還是我把它放在部分實體類中?
partial MyEntities {
[EdmFunction("CarSystemModel.Store", "GuidToPrefix")]
public static int GuidToPrefix(Guid id) {
throw new NotSupportedException("Direct calls to GuidToPrefix are not supported.");
}
}
我有兩個項目使用這個實體模型。一個是類庫,模型定義在其中。另一個是另一個使用它的解決方案中的另一個類庫。我已經試過這兩個例子以上和二級庫查詢從編譯器在兩種情況下生成此錯誤:
The name 'GuidToPrefix' does not exist in the current context
很顯然,我不是做正確的事情。有沒有人試過這個,並得到它的工作?
事實上,放置靜態方法並不重要,但會放在上下文中,以表示它是數據層的一部分。 –
@GertArnold:不,它沒有。這個例子令人困惑,因爲至少我不清楚他們是否把它放在示例類中。一旦這個概念通過我的頭,這很簡單。我不能100%確定函數必須是靜態的;如果你將它作爲上下文的實例方法,它可能會工作。雖然,我已經掌握了它的工作,但我不會去玩。 –