将存储过程结果集存储在应用程序变量错误中
本文关键字:应用程序 变量 错误 存储 存储过程 结果 | 更新日期: 2023-09-27 18:27:53
我是一名初级开发人员,对应用程序变量不熟悉。我有一个存储过程,它返回一个小的查找表。我想将结果集存储在一个应用程序变量中,这样它就可以用于应用程序,但不能像静态那样进行会话。
在我的global.asax:
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Application["lookup"] = FunctionThatGetsSprocResult();
}
我的数据库调用函数:
internal static ObjectResult<GetLookupTable_Result> FunctionThatGetsSprocResult()
{
ObjectResult<GetLookupTable_Result> result;
using (dbContext db = new dbContext())
{
result = db.GetLookupTable();
}
return result;
}
在我的控制器中:
public ActionResult Index()
{
var myVar = (ObjectResult<GetLookupTable_Result>)HttpContext.Application["lookup"];
return View();
}
忽略了它实际上对myVar没有任何作用的事实,当我快速观察它时,我收到了一个错误当数据读取器关闭时调用"read"不是一个有效的操作在谷歌上搜索发现了一些线程,但最终没有帮助。我想把结果集存储在一个可管理的结构中,比如字典之类的
MVC 4.5,EF 6。
根据以下线程,当数据读取器关闭时调用"read"不是一个有效的操作,如果启用了延迟求值(如果您愿意,可以禁用它),则在请求时执行查询。当您打开强制执行查询的quickwatch时。到那时,显然数据读取器已经关闭,因此无法执行查询,因此出现了错误。您需要做的是在调用FunctionThatGetsSprocResult()之后立即调用ToList()。
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Application["lookup"] = FunctionThatGetsSprocResult();
((ObjectResult<GetLookupTable_Result>)Application["lookup"]).ToList();
}
通过这种方式,您请求获取查询结果!或者,您可以更改FunctionThatGetsSprocResult并调用其中的ToList():
internal static ObjectResult<GetLookupTable_Result> FunctionThatGetsSprocResult()
{
ObjectResult<GetLookupTable_Result> result;
using (dbContext db = new dbContext())
{
result = db.GetLookupTable();
}
result.ToList();
return result;
}