2016-09-26 4 views
1

Entity Developerとモデル定義関数に問題があります。 Ealier Entity Developerはデータベース関数をサポートしていないので、私はストアドプロシージャとして関数をマッピングしていました。私はこのtopic from devart forumに記載されているソリューションを使用していました。しかし、それは私のためには今使用していません。なぜなら私はLinqクエリでそれをエンティティ上のより大きな選択ステートメントの一部として使うことができないからです。Entity Framework 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ファイル機能で

は、次のように生成されます。CSDLファイルで

<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" /> 

それはこのようなものです:

<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> 

そして、私の実装は次のようになりますthis:

[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によって生成されたデータベースの名前空間、関数と変数の型にありました。 が、私はそのような何かしなければならなかった:、CSDLファイルは問題ではありません

[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たタイプに種類を変更し、モデルへのエンティティの開発者に機能を追加することで必要がない、ただそれを残しますssdlファイルでこの関数を手でC#でマップし、それは魅力的に機能します。

関連する問題