如何使用现有的存储过程&功能与实体框架代码优先

时间:2016-09-18 08:12:53

标签: c# asp.net-mvc entity-framework entity-framework-4 entity-framework-6

当我们首先使用Entity Framework代码时,我使用EntityFramework.Functions库来调用存储过程或函数。

我有一个存储过程,返回一个可以为空的长值。但是我收到了一个错误:

  

System.Nullable`1 [[System.Int64,mscorlib,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b77a5c561934e089]]方法AddRecord_SP在概念模型中不支持作为结构类型。

这些函数在我的DataContext类中声明:

[Function(FunctionType.StoredProcedure, "Sp_name", Schema = "acnt")]
public virtual ObjectResult<Nullable<long>> AddRecord_SP(string i_Params)
{
     var i_ParamsParameter = i_Params != null ?
            new ObjectParameter("I_Params", i_Params) :
            new ObjectParameter("I_Params", typeof(string));

     return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<long>>("Sp_name", i_ParamsParameter);
}

1 个答案:

答案 0 :(得分:0)

据我所知,存储过程实际上无法指定参数不可为空。

也许您可以尝试指定返回参数。

 [return: Parameter(DbType = "")]

下面是您可以参考的“我的项目”中的示例代码。

[Function(FunctionType.StoredProcedure, "GetTop100", Schema = "biz")]
    public IQueryable<GetTop100Emp> GetTop100EmpList(long? FKTenant,  int IsFilter)
    {
        var parameters = new ObjectParameter[] {
            new ObjectParameter("FKTenant", FKTenant),
            new ObjectParameter("IsFilter", IsFilter),
        };
        return this.ObjectContext.ExecuteFunction<GetTop100Emp>("GetTop100", parameters).AsQueryable<GetTop100Emp>();