我有以下类和控制器
public class FieldHelper
{
public FieldHelper(RoomMeta rm, string typeClass)
{
this.typeClass = typeClass;
this.Name = rm.Name;
if (rm.Required)
this.required = "required";
else
this.required = "optional";
}
public FieldHelper(EventTypeMeta etm, string typeClass)
{
this.typeClass = typeClass;
this.Name = etm.Name;
if (etm.Required)
this.required = "required";
else
this.required = "optional";
}
public string typeClass { get; set; }
public string Name { get; set; }
public string required { get; set; }
}
[HttpGet]
public JsonResult GetDefaultFields(int eventTypeID, int roomID)
{
using (var db = new MyDbContext())
{
List<FieldHelper> fields = new List<FieldHelper>();
foreach(RoomMeta rm in db.RoomMetaSet.Where(rm => rm.RoomId == roomID))
{
fields.Add(new FieldHelper(rm, rm.FieldTypes.Name)); //Here the Exception gets thrown
}
foreach(EventTypeMeta etm in db.EventTypeMetaSet.Where(etm => etm.EventTypeId == eventTypeID))
{
fields.Add(new FieldHelper(etm, etm.FieldTypes.Name));
}
return Json(fields, JsonRequestBehavior.AllowGet);
}
}
我的数据库布局如下所示:
现在,当我在我使用SQL Server Express 2014安装的本地计算机上运行时,一切都按照我预期的方式工作。但是,一旦我将应用程序部署到带有Azure SQL数据库的Windows Azure网站,我就会在标记的行上获得EntityCommandExecutionException。内部异常告诉我&#34;已经有一个与此命令关联的开放DataReader必须先关闭。&#34;这似乎对我来说更有用,但我仍然无法弄清楚为什么这种情况适用于当地而不是在线。
任何想法都将不胜感激。
答案 0 :(得分:0)
看起来我自己找到了答案。由于我没有在我的查询中包含相关的实体,实体框架试图打开另一个连接,由于我的azure sql数据库的限制而失败。
我改变了
foreach(RoomMeta rm in db.RoomMetaSet.Where(rm => rm.RoomId == roomID))
到
foreach(RoomMeta rm in db.RoomMetaSet.Include("FieldTypes").Where(rm => rm.RoomId == roomID))
现在一切正常。