【问题标题】:Calling a stored procedure in MVC [duplicate]在 MVC 中调用存储过程 [重复]
【发布时间】:2016-01-21 15:15:28
【问题描述】:

我有一个存储过程,我试图调用它来将结果返回到我的视图。我的模型文件夹中有一个类,我试图从中调用它。

 public  class MasterMenu
    {

        public  List<USP_MenuList_ForUser_G_Result> GetMenus(int userId)
        {


            List<USP_MenuList_ForUser_G_Result> GetMenuListForUser = null;
            using (MenuEntities dataContext = new MenuEntities())
            {
                GetMenuListForUser = dataContext.USP_MenuList_ForUser_G(56367).ToList();
                return GetMenuListForUser;
            }
        }

我试图在我的视野中达到它

<body>

    <div id="header">
        <div id="logo">
        </div>

    </div>
    @if (Model.GetMenus(56367) != null && Model.GetMenus(56367).Count > 0)
    { }



    @RenderBody()
</body>

我不确定要在控制器中执行什么操作才能访问存储过程。该过程采用一个参数,即用户 ID,它需要访问的所有表都在我的 EDMX 中。这是我的控制器的样子。

public class MasterMenuController : Controller
    {
        private MenuEntities menuEntities = new MenuEntities();
}

我也有这个类,它看起来像一个 db 上下文类,但在我创建 EDMX 时自动生成。

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated from a template.
//
//     Manual changes to this file may cause unexpected behavior in your application.
//     Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace Adds.Areas.Mvc.Menu.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;
    using System.Data.Entity.Core.Objects;
    using System.Linq;

    public partial class MenuEntities : DbContext
    {
        public MenuEntities()
            : base("name=MenuEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public virtual DbSet<tblAgent> tblAgents { get; set; }
        public virtual DbSet<tblMenu> tblMenus { get; set; }
        public virtual DbSet<tblQualifier> tblQualifiers { get; set; }
        public virtual DbSet<tblRoleMenuMapping> tblRoleMenuMappings { get; set; }
        public virtual DbSet<tblRole> tblRoles { get; set; }
        public virtual DbSet<tblUserRoleMapping> tblUserRoleMappings { get; set; }
        public virtual DbSet<tblUsersLogin> tblUsersLogins { get; set; }
        public virtual DbSet<tblUserMenuMapping> tblUserMenuMappings { get; set; }

        public virtual ObjectResult<USP_MenuList_ForUser_G_Result> USP_MenuList_ForUser_G(Nullable<int> userID)
        {
            var userIDParameter = userID.HasValue ?
                new ObjectParameter("UserID", userID) :
                new ObjectParameter("UserID", typeof(int));

            return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<USP_MenuList_ForUser_G_Result>("USP_MenuList_ForUser_G", userIDParameter);
        }
    }
}

【问题讨论】:

  • 根据生成的上下文,他似乎已经导入了函数。
  • 我添加了一张图片来说明这一点。感谢您的关注

标签: c# sql-server asp.net-mvc asp.net-mvc-4 stored-procedures


【解决方案1】:

您的控制器必须使其可用于视图,例如传递到强类型视图或 ViewBag 中的模型的一部分。由于您似乎是在全局布局或部分视图中执行此操作,因为它是一个始终可见的菜单,您可能会考虑包装代码以将其添加到 ViewBag 中的全局过滤器中,该过滤器将添加到 global.asax 中的站点.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 1970-01-01
    • 1970-01-01
    • 2018-06-19
    相关资源
    最近更新 更多