下面是一个Get请求:
$("#productName").change(function () {
$.getJSON("/Deliveryorder/GetInventory/", { productNameid: $("#productName").val() }, function (result) {
if (result != 0) {
$(result).each(function () {
$("#textcount").keyup(function () {
var count = $("#textcount").attr("value");
if (count > result) {
alert("数量不足");
}
});
$("#Iy").val(result);
});
}
else {
$("#textcount").keyup(function () {
var count = $("#textcount").attr("value");
if (count > result) {
alert("数量不足");
}
});
$("#Iy").val(0);
}
});
});
在调试的时候在控制器中能够接收到id的值
//根据货品的ID查询货品的库存数量
public JsonResult GetInventory(int productNameid)
{
var inventory = _inventoryRepository.Get(x => x.Product.ID == productNameid);
if(inventory!=null)
{
return Json(inventory.Count, JsonRequestBehavior.AllowGet);
}
return Json(0,JsonRequestBehavior.AllowGet);
}
但是数据不显示每次都运行到Get方法的时候断掉了,也就是这里有异常。然后我再浏览器里面敲/Deliveryorder/GetInventory?productNameid=1。就会有详细的错误信息:
应用程序中的服务器错误
已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: 已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
源错误:
行 128: public JsonResult GetInventory(int productNameid)
行 129: {
行 130: var inventory = _inventoryRepository.Get(x => x.Product.ID == productNameid);
行 131: if(inventory!=null)
行 132: {
可是我反复查看都没有问题啊。哪位大哥告诉我错误啊,或者有没有更好的差错方法能让错误更具体点。
问题时用Repository模式是,访问数据时出现:
var inventory = _inventoryRepository.GetMany(x => x.Product.ID == productNameid);
已有打开的与此 Command 相关联的 DataReader,必须首先将它关闭。
的错误
我用的是网上的Repository模式:
下面是Repository的类中的两个代码
public virtual IEnumerable<T> GetMany(Func<T, bool> where)
{
return dbset.Where(where).ToList();
}
public T Get(Func<T, Boolean> where)
{
return dbset.Where(where).FirstOrDefault<T>();
}
DataReader 使用前,必須是關閉的,使用后,也要關閉。
但是在MVC中使用Ef和Repository之后,我压根没用用到一个DataReader对象。
问题出在 _inventoryRepository.Get 的实现代码中,需要提供这部分代码,别人才能回答这个问题。