【问题标题】:asp.net entity framework stored procedure error on second stored procedure第二个存储过程上的 asp.net 实体框架存储过程错误
【发布时间】:2019-01-30 07:50:26
【问题描述】:

在 ASP.NET MVC 中我有这个控制器:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using test.DB;
using test.EFView;

namespace test.Controllers
{
    public class OrderAndDDTController : Controller
    {

        // GET: OrderAndDDT
        public ActionResult Index(DateTime? Start, DateTime? End)
        {
            if (Start != null && End != null)
            {
                using (var db = new PROVA_ETLEntities())
                {
                    ViewBag.Start = Start;
                    ViewBag.End = End;
                    var list = db.ddsp_getFamQty_FI(Start, End).OrderBy(x => x.Famiglia).ToList();
                    return View(list);
                }
            }

            return View();
        }

        public ActionResult Customer(DateTime? Start, DateTime? End, string Famiglia)
        {
            if (Start != null && End != null)
            {
                using (var db = new PROVA_ETLEntities())
                {
                    ViewBag.Start = Start;
                    ViewBag.End = End;
                    ViewBag.Famiglia = Famiglia;
                    var list = db.ddsp_getFamCustQty_FI(Start, End, Famiglia).OrderBy(x => x.Cliente).ToList();
                    return View(list);
                }
            }

            return View();
        }
    }
}

在索引视图中,我有一个运行第二个actionresult“客户”的按钮。当我尝试运行它时,它会超时。我使用上面代码将传递的参数尝试相同的存储过程,执行时间不到一秒钟。似乎第一个 SQL 语句仍然打开并且不允许发送第二个(我在 SQL 活动监视器中看到它)。

出错的地方是自动生成代码(通过实体框架),是这样的

public virtual ObjectResult<ddsp_getFamCustQty_Result> ddsp_getFamCustQty_FI(Nullable<System.DateTime> dateStart, Nullable<System.DateTime> dateEnd, string family)
{
    var dateStartParameter = dateStart.HasValue ?
        new ObjectParameter("dateStart", dateStart) :
        new ObjectParameter("dateStart", typeof(System.DateTime));

    var dateEndParameter = dateEnd.HasValue ?
        new ObjectParameter("dateEnd", dateEnd) :
        new ObjectParameter("dateEnd", typeof(System.DateTime));

    var familyParameter = family != null ?
        new ObjectParameter("family", family) :
        new ObjectParameter("family", typeof(string));

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<ddsp_getFamCustQty_Result>("ddsp_getFamCustQty_FI", dateStartParameter, dateEndParameter, familyParameter);
} 

在最后一行,SQL 超时异常。

【问题讨论】:

  • 我假设 ddsp_getFamCustQty_FI 是您要执行的 SP,可能您应该尝试优化执行计划或通过查找此问题来增加超时限制:stackoverflow.com/questions/15772252/…
  • 谢谢,不过不是执行时间的问题(就像我写的存储过程执行不到一秒)。在和我重新启动 SQL 服务,现在它去了。不过谢谢你的回答

标签: c# sql-server asp.net-mvc entity-framework


【解决方案1】:

你可以设置命令超时,如下图

   ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180;//in seconds

【讨论】:

  • 谢谢,不过不是执行时间的问题(就像我写的存储过程执行不到一秒)。在和我重新启动 SQL 服务,现在它去了。不过谢谢你的回答
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
  • 1970-01-01
  • 2013-03-19
相关资源
最近更新 更多