gpt4 book ai didi

wcf - Entity Framework 4 POCO 的存储过程错误 - "The FunctionImport could not be found in the container"

转载 作者:行者123 更新时间:2023-12-01 13:47:03 25 4
gpt4 key购买 nike

Entity Framework 与由 T4 模板生成的 POCO 实体。添加了函数导入,将其命名为“procFindNumber”,指定的复杂集合将其命名为“NumberResult”。

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

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 服务中,我尝试执行存储过程:

[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 ...”

我做错了什么?

最佳答案

您需要使用容器名称限定函数导入。

例如改变这个:

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

为此:

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

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

关于wcf - Entity Framework 4 POCO 的存储过程错误 - "The FunctionImport could not be found in the container",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4892926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com