如何从EF 3.5中的存储过程编写导入函数的代码?

时间:2009-09-03 19:24:53

标签: entity-framework

我有一个存储过程GetMyTime。它有一个参数int PersonID,并返回一个datatime。将其添加到EDMX并将其作为函数导入。然后我尝试模拟4.0编写如下代码:

public ObjectResult<Nullable<global::System.DateTime>> GetMyTime(Nullable<global::System.Int32> PersonID)
        {
            ObjectParameter[] PersonIDParameters;
            if (PersonID.HasValue)
            {
                PersonIDParameters = new ObjectParameter[]{new ObjectParameter("PersonID", PersonID)};
            }
            else
            {
                PersonIDParameters = new ObjectParameter[]{new ObjectParameter("PersonID",typeof(global::System.Int32))};
            }
            return base.ExecuteFunction<Nullable<global::System.DateTime>>("GetMyTime", PersonIDParameters);  //this line cause error
        }

但是我在最后一行收到错误: 错误2类型'System.DateTime?'不能在泛型类型或方法'System.Data.Objects.ObjectContext.ExecuteFunction(string,params System.Data.Objects.ObjectParameter [])'中用作类型参数'TElement'。 'System.DateTime?'没有拳击转换。到'System.Data.Objects.DataClasses.IEntityWithChangeTracker'。

如何解决?

1 个答案:

答案 0 :(得分:1)

根据MSDN"TElement"中的ExecuteFunction<TElement>是实体类型。你想要返回一个标量值。

在v3.5中中断了返回标量值,但是你提到你正在使用EF v4,所以它应该可行。我的建议是通过EDM设计器连接标量函数导入,构建并使用生成的代码来指导如何返回标量值。