2016-09-26 94 views
1

我遇到實體開發人員和模型定義函數的問題。 Ealier我將函數映射爲存儲過程,因爲實體開發人員不支持數據庫功能。我正在使用此topic from devart forum中提到的解決方案。但是現在它對我沒有用處,因爲我不能在Linq查詢中將它用作實體上較大選擇語句的一部分。實體框架6無法識別數據庫模型中的映射函數

我想添加像this這樣的功能,並使其提到here。但是,我得到這個例外

其他信息:LINQ到實體無法識別方法「System.Nullable 1[System.Int32] EwBlobIleWyst(System.String, System.Nullable 1 [System.Int32],System.String,System.Nullable`1 [System.Int32]) '方法,並且此方法不能轉換爲商店表達式。

在SSDL文件功能是這樣產生的:

<Function Name="EW_BLOB_ILE_WYST" IsComposable="true" ReturnType="decimal" BuiltIn="false" Aggregate="false" NiladicFunction="false" ParameterTypeSemantics="AllowImplicitConversion" Schema="EWID4" StoreFunctionName="EW_BLOB_ILE_WYST"> 
<Parameter Name="OWNER" Type="VARCHAR2" Mode="In" /> 
<Parameter Name="OWNER_ID" Type="decimal" Mode="In" /> 
<Parameter Name="RODZ_DOK_IDS" Type="VARCHAR2" Mode="In" /> 
<Parameter Name="LICZ_PUSTE" Type="decimal" Mode="In" /> 

在CSDL文件是這樣的:

<Function Name="EwBlobIleWyst" ReturnType="Collection(Int32)" ed:Guid="f544518f-1cdd-484c-92b4-73b61491dc54"> 
<Parameter Name="OWNER" Type="String" /> 
<Parameter Name="OWNER_ID" Type="Int32" /> 
<Parameter Name="RODZ_DOK_DS" Type="String" /> 
<Parameter Name="LICZ_PUSTE" Type="Int32" /> 
<DefiningExpression>SELECT EWID4.EW_BLOB_ILE_WYST(:OWNER, :OWNER_ID, :RODZ_DOK_IDS, :LICZ_PUSTE) FROM KDOK_WSK</DefiningExpression> 

,我的實看起來像這個:

[EdmFunction(@"Ewid4", @"EwBlobIleWyst")] 
    public virtual global::System.Nullable<int> EwBlobIleWyst(string OWNER, global::System.Nullable<int> OWNER_ID, string RODZ_DOK_IDS, global::System.Nullable<int> LICZ_PUSTE) 
    { 
     throw new NotSupportedException(); 
    } 

此代碼位於部分上下文類中。 ,我使用它是這樣的:

DokPow = ((Ewid4)context).EwBlobIleWyst("smth", 1, null, 0) 

這個片段裏面選擇使用LINQ

回答

0

我只是得到一個解決方案可查詢的。問題在於由Entity Developer生成的屬性,數據庫名稱空間以及函數和變量類型。 我不得不做出這樣的事情:

[DbFunction("Ewid.Database.Entities.Store", "EW_BLOB_ILE_WYST")] 
    public static decimal EwBlobIleWyst(string OWNER, decimal OWNER_ID, string RODZ_DOK_IDS, decimal LICZ_PUSTE) 
    { 
     throw new NotSupportedException(); 
    } 

,並更改類型到在SSDL文件genereted類型,CSDL文件並不重要,沒有在實體開發到模型中添加功能不需要,只要把它在ssdl文件中,並在c#中手動映射這個函數,它就像一個魅力。