C# 仅在AzureSQL上发生EntityCommandExecutionException

C# 仅在AzureSQL上发生EntityCommandExecutionException,c#,asp.net,entity-framework,azure-sql-database,C#,Asp.net,Entity Framework,Azure Sql Database,我有下面的类和控制器 public class FieldHelper { public FieldHelper(RoomMeta rm, string typeClass) { this.typeClass = typeClass; this.Name = rm.Name; if (rm.Required) this.required = "r

我有下面的类和控制器

    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);
        }
    }
公共类FieldHelper
{
公共FieldHelper(RoomMeta rm,字符串类型类)
{
this.typeClass=typeClass;
this.Name=rm.Name;
如果需要(需要rm)
this.required=“required”;
其他的
this.required=“可选”;
}
公共FieldHelper(EventTypeMeta etm,字符串类型类)
{
this.typeClass=typeClass;
this.Name=etm.Name;
如果需要(etm)
this.required=“required”;
其他的
this.required=“可选”;
}
公共字符串类型类{get;set;}
公共字符串名称{get;set;}
需要公共字符串{get;set;}
}
[HttpGet]
公共JsonResult GetDefaultFields(int eventTypeID、int roomID)
{
使用(var db=new MyDbContext())
{
列表字段=新列表();
foreach(db.RoomMetaSet.Where中的RoomMeta-rm(rm=>rm.RoomId==RoomId))
{
fields.Add(newfieldhelper(rm,rm.FieldTypes.Name));//这里抛出异常
}
foreach(在db.EventTypeMetaSet.Where中的EventTypeMeta-etm(etm=>etm.EventTypeId==EventTypeId))
{
添加(新的FieldHelper(etm,etm.FieldTypes.Name));
}
返回Json(字段,JsonRequestBehavior.AllowGet);
}
}
我的数据库布局如下所示:

现在,当我在我的本地机器上运行这个程序时,我使用了SQL Server Express 2014安装,一切都按照我预期的方式运行。但是,一旦我将应用程序部署到带有Azure SQL数据库的Windows Azure网站上,我会在标记行处得到EntityCommandExecutionException。内部异常告诉我“已经有一个与此命令相关联的打开的DataReader,必须先关闭它。”这对我来说似乎更有用,但我仍然不明白为什么它在本地工作而不是在线工作


任何想法都将不胜感激。

看来我自己找到了答案。由于我的查询中没有包含相关的实体,entity framework尝试打开另一个连接,但由于我的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))