执行函数中的类型参数与函数返回的类型不兼容

时间:2013-05-08 14:17:59

标签: entity-framework entity-framework-5

尝试将存储过程导入为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)。

功能映射:

enter image description here

更多功能映射详细信息:

enter image description here

testy_Result类:

  public partial class testy_Result
    {
        public string hello { get; set; }
    }

2 个答案:

答案 0 :(得分:2)

过去几天我一直在努力解决同样的问题。我的项目也已从先前版本的Entity Framework升级到5.0。我终于发现它是由于混合了新旧edmx。删除旧的edmx允许新的edmx工作,但当然这不是一个可行的解决方案。我还能够通过将新的(EF 5)edmx的代码生成策略更改为&#34; Legacy ObjectContext&#34;来使其工作。如果您不熟悉,可以通过打开edmx图,右键单击并转到“属性”来找到它。我怀疑项目中的所有edmx只需要采用相同的代码生成策略,因此您可能也可以将旧的更改为T4,尽管这可能涉及更多的工作。

答案 1 :(得分:0)

我不知道这是否有帮助,但这是我一般做的事情:

假设您有来自实体框架的以下POCO类:

using System;

public partial class testy_Result
{
    public string hello { get; set; }
}

以下电话通常可以解决这个问题:

public partial class Entities: DbContext
{

    public virtual ObjectResult<testy_Result> testy()
    {
        ((IObjectContextAdapter)this).ObjectContext.MetadataWorkspace.LoadFromAssembly(typeof(testy_Result).Assembly);

        return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<testy_Result>
            ("testy", MergeOption.OverwriteChanges);
    }
}

另外,为了以防万一,我将调用包含在using子句中:

        try
        {
            using (Models.Data.Entities Entities = new Models.Data.Entities())
            {
                var x = Entities.testy().FirstOrDefault().hello;
            }
        }
        catch (Exception ex)
        {
            System.Diagnostics.Debug.WriteLine("Error: " + ex.Message);
        }

让我知道它是否适合你。

干杯。