尝试将存储过程导入为Entity Framework 5中的函数时,我收到以下错误 . 我最近更新了数据项目以引用新版本的EF .
ExecuteFunction中的类型参数'SSDS.Data.testy_Result'与函数返回的类型'SSDS.Data.testy_Result'不兼容 .
我无法让它适用于任何存储过程...这是我的简单测试:
CREATE PROCEDURE testy
AS
BEGIN
select 'hello' as hello
END
GO
它打破了上面的例外:
public virtual ObjectResult<testy_Result> testy()
{
return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<testy_Result>("testy");
}
在模型设计器的“编辑函数导入”窗口中将结果设置为字符串标量时,没有错误 .
我正在调用这样的函数:
private Entities db = new Entities();
var x = db.testy();
我有什么明显的遗漏吗?我的项目中有一些edmx文件,其他文件是使用旧版本的EF创建的(并使用ObjectContext) .
功能映射:
更多功能映射详细信息:
testy_Result类:
public partial class testy_Result
{
public string hello { get; set; }
}
2 回答
在过去的几天里,我一直在努力解决同样的问题 . 我的项目也已从先前版本的Entity Framework升级到5.0 . 我终于发现它是由于混合了新旧edmx . 删除旧的edmx允许新的edmx工作,但当然这不是一个可行的解决方案 . 我还能够通过将新的(EF 5)edmx的代码生成策略更改为“Legacy ObjectContext”来使其工作 . 如果您不熟悉,可以通过打开edmx图,右键单击并转到“属性”来找到它 . 我怀疑项目中的所有edmx只需要采用相同的代码生成策略,因此您可能也可以将旧的更改为T4,尽管这可能涉及更多工作 .
我不知道这是否有帮助,但这是我一般做的事情:
假设您有来自实体框架的以下POCO类:
以下调用通常对我有用:
另外,为了以防万一,我将调用包含在using子句中:
让我知道它是否适合你 .
干杯 .