2016-09-26 4 views
1

Entity Developer 및 모델 정의 함수에 문제가 있습니다. Ealier Entity Developer는 데이터베이스 기능을 지원하지 않기 때문에 저장 프로 시저로 함수를 매핑했습니다. 이 topic from devart forum에 언급 된 솔루션을 사용하고있었습니다. 하지만 엔티티에 대한 더 큰 select 문의 부분으로 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 파일 기능에서

는 다음과 같이 생성됩니다

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

그리고 내 구현처럼 보인다 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#으로 매핑하면 매력처럼 작동합니다.