2011-02-03 11 views
3

T4テンプレートによって生成されたPOCOエンティティを持つEntity Framework。追加された関数のインポート "procFindNumber"という名前の複合コレクション "NumberResult"という名前を付けました。ここでエンティティフレームワーク4 POCOのストアドプロシージャエラー - 「FunctionImportがコンテナ内に見つかりませんでした」

はContext.csファイルに生成しまったものです:私のWCFサービスで

ALTER PROCEDURE [dbo].[procFindNumber] 
@lookupvalue varchar(255) 
AS 
BEGIN 
SET NOCOUNT ON;  
DECLARE @sql nvarchar(MAX); 

IF @lookupvalue IS NOT NULL AND @lookupvalue <> '' 
    BEGIN     
     SELECT @sql = 'SELECT dbo.HBM_CLIENT.CLIENT_CODE, dbo.HBM_MATTER.MATTER_NAME, dbo.HBM_MATTER.CLIENT_MAT_NAME 
       FROM dbo.HBM_MATTER INNER JOIN dbo.HBM_CLIENT ON dbo.HBM_MATTER.CLIENT_CODE = dbo.HBM_CLIENT.CLIENT_CODE 
       LEFT OUTER JOIN dbo.HBL_CLNT_CAT ON dbo.HBM_CLIENT.CLNT_CAT_CODE = dbo.HBL_CLNT_CAT.CLNT_CAT_CODE 
       LEFT OUTER JOIN dbo.HBL_CLNT_TYPE ON dbo.HBM_CLIENT.CLNT_TYPE_CODE = dbo.HBL_CLNT_TYPE.CLNT_TYPE_CODE 
       WHERE (LTRIM(RTRIM(dbo.HBM_MATTER.CLIENT_CODE)) <> '''')' 
     SELECT @sql = @sql + ' AND (dbo.HBM_MATTER.MATTER_NAME like ''%' + @lookupvalue + '%'')' 
     SELECT @sql = @sql + ' OR (dbo.HBM_MATTER.CLIENT_MAT_NAME like ''%' + @lookupvalue + '%'')' 
     SELECT @sql = @sql + ' ORDER BY dbo.HBM_MATTER.MATTER_NAME' 
     -- Execute the SQL query 
     EXEC sp_executesql @sql 
    END 
END 

私はストアドプロシージャを実行しよう:

[WebGet(UriTemplate = "number/{value}/?format={format}")]   
public IEnumerable<NumberResult> GetNumber(string value, string format) 
{ 
    if (string.Equals("json", format, StringComparison.OrdinalIgnoreCase)) 
    { 
     WebOperationContext.Current.OutgoingResponse.Format = WebMessageFormat.Json; 
    } 

    using (var ctx = new MyEntities()) 
    {     
     ctx.ContextOptions.ProxyCreationEnabled = false; 
     var results = ctx.procFindNumber(value); 
     return results.ToList(); 
    } 
} 

public ObjectResult<NumberResult> procFindNumber(string lookupvalue) 
{ 
    ObjectParameter lookupvalueParameter; 

    if (lookupvalue != null) 
    { 
     lookupvalueParameter = new ObjectParameter("lookupvalue", lookupvalue); 
    } 
    else 
    { 
     lookupvalueParameter = new ObjectParameter("lookupvalue", typeof(string)); 
    } 
    return base.ExecuteFunction<NumberResult>("procFindNumber", lookupvalueParameter); 
} 

ここでストアドプロシージャです

"FunctionImport ...コンテナ内に見つかりませんでした..."というエラーメッセージが表示される

私は間違っていますか?

答えて

2

関数のインポートをコンテナ名で修飾する必要があります。

return base.ExecuteFunction<NumberResult>("EntityContainerName.procFindNumber", lookupvalueParameter); 

エンティティコンテナー名は、お使いのEDMXに記載されています - 右の任意の場所をクリックし、 "プロパティ" を実行します。これに

return base.ExecuteFunction<NumberResult>("procFindNumber", lookupvalueParameter); 

例えばこれを変更します。

+0

ありがとうございました! – dm80

+0

問題ありません.... – RPM1984

1

私はEF 4.1と同様の問題がありました。コードがリリースモードで実行されているときにこの問題が発生することがわかりました。デバッグモードでは、正常に動作します。

+3

ここに示唆しているように、コンテナ名を追加しようとしましたが、それは私の問題を解決しませんでした。 –

関連する問題