【问题标题】:Retrieve list/rows of values from "select" stored procedure , where stored procedure Function is auto generated from Entity Framework从“选择”存储过程中检索值列表/行,其中存储过程函数是从实体框架自动生成的
【发布时间】:2015-06-29 08:34:03
【问题描述】:

如何从“选择”存储过程函数中检索值列表/行,其中存储过程函数是从实体框架自动生成的

我无法从存储过程函数中检索值列表,我被困在代码的某些部分,其中存储过程函数是使用实体框架自动生成的
请检查附加的代码并帮助我解决这个问题。 提前致谢

create procedure [dbo].[SP_MobileList]
(
@MobileId varchar(50) out,
@MobileName varchar(50) out
)
As
Begin
select @MobileId=MobileId,@MobileName=MobileName from BasicMobileData
END

来自实体框架的自动生成代码

//ModelClass
    public partial class BasicMobileData
    {
        public string MobileId { get; set; }
        public string MobileName { get; set; }
        public string MobileIMEno { get; set; }
        public decimal MobilePrice { get; set; }
    }

//In Context
    public virtual DbSet<BasicMobileData> BasicMobileDatas { get; set; }

    //Here it returns single integer value 
    **public virtual int SP_MobileList(ObjectParameter mobileID, ObjectParameter mobileName)
     {
     return((IObjectContextAdapter)this).ObjectContext.ExecuteFunction("SP_MobileList", mobileID, mobileName);
    }**

控制器代码

public class MobileController : Controller
{
    MobileEntities objMobileContext = new MobileEntities();
    BasicMobileData objBasicMobileData = new BasicMobileData();

    #region "ActionMethods"
    public ActionResult MobileDetails()
    {
        ObjectParameter objParMobileId = new ObjectParameter("MobileId",typeof(string));
        ObjectParameter objParMobileName = new ObjectParameter("MobileName", typeof(string));

        //I am Stucked in this part of code
        // this "foreach" will not work since ,autogenerated "SP_MobileList(,)" is returning single integer value"
        foreach(BasicMobileData objBasicMobileData  in objMobileContext.SP_MobileList(objParMobileId,objParMobileName)){}
        return View();
    }
    #endregion        
}

【问题讨论】:

    标签: asp.net-mvc entity-framework sql-server-2008 asp.net-mvc-4 stored-procedures


    【解决方案1】:

    我得到了解决方案及其工作

    改变存储过程

    create procedure [dbo].[SP_MobileList]
    As
    Begin
    select MobileId,MobileName from BasicMobileData
    END
    

    然后自动生成存储过程

     public virtual ObjectResult<SP_MobileIdName_s_Result> SP_MobileIdName_s()
    {
                return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<SP_MobileIdName_s_Result>("SP_MobileIdName_s");
    }
    
    public partial class SP_MobileIdName_s_Result
    {
       public string MobileId { get; set; }
       public string MobileName { get; set; }
    }
    

    在控制器中

    public class MobileController : Controller
        {
            MobileEntities objMobileContext = new MobileEntities();
            SP_MobileIdName_s_Result objMobile = new SP_MobileIdName_s_Result();
    
            #region "ActionMethods"
            public ActionResult MobileDetails()
            {
                foreach (SP_MobileIdName_s_Result objMobile in objMobileContext.SP_MobileIdName_s())
                {
                    Response.Write(objMobile.MobileId);
                    Response.Write(objMobile.MobileName);
                }
                return View();
            }
            #endregion
    
        }
    

    【讨论】:

    • @To_All 此处自动生成存储过程返回 ObjectResult 其中“SP_MobileIdName_s_Result”是自动生成的模型,其中包含从存储返回的所有成员类型过程函数
    【解决方案2】:

    你可以使用:

    EXEC sp_help SP_MobileList

    其中列出了您在过程/函数中使用的参数

    【讨论】:

    • 感谢重播,你能解释一下我们如何在这里使用它
    • 你能解释一下我们如何在这里使用“EXEC sp_help SP_MobileList”吗?
    猜你喜欢
    • 1970-01-01
    • 2011-12-30
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多