实体框架 4 POCO 的存储过程错误 - “The FunctionImport could not be found in the container" [英] entity framework 4 POCO's stored procedure error - "The FunctionImport could not be found in the container"

查看:21
本文介绍了实体框架 4 POCO 的存储过程错误 - “The FunctionImport could not be found in the container"的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

具有由 T4 模板生成的 POCO 实体的实体框架.添加了命名为procFindNumber"的函数导入,指定了命名为NumberResult"的复杂集合.

Entity Framework with POCO Entities generated by T4 template. Added Function Import named it "procFindNumber" specified complex collection named it "NumberResult".

这是在 Context.cs 文件中生成的内容:

Here's what got generated in Context.cs file:

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);
}

这是存储过程:

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

在我的 WCF 服务中,我尝试执行存储过程:

In my WCF service I try to execute the stored procedure:

[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();
   }
}

错误消息显示在容器中找不到 FunctionImport ..."

Error message says "The FunctionImport ... could not be found in the container ..."

我做错了什么?

推荐答案

你需要用容器名称来限定函数导入.

You need to qualify the function import with the container name.

例如改变这个:

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

到这里:

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

实体容器名称可在您的 EDMX 上找到 - 右键单击​​任意位置并执行属性".

The entity container name is found on your EDMX - right click anywhere and do "Properties".

这篇关于实体框架 4 POCO 的存储过程错误 - “The FunctionImport could not be found in the container"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆