EntityCommandExecutionException仅在Azure SQL上发生

时间:2015-01-24 23:36:57

标签: 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 = "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);
        }
    }

我的数据库布局如下所示:

database layout

现在,当我在我使用SQL Server Express 2014安装的本地计算机上运行时,一切都按照我预期的方式工作。但是,一旦我将应用程序部署到带有Azure SQL数据库的Windows Azure网站,我就会在标记的行上获得EntityCommandExecutionException。内部异常告诉我&#34;已经有一个与此命令关联的开放DataReader必须先关闭。&#34;这似乎对我来说更有用,但我仍然无法弄清楚为什么这种情况适用于当地而不是在线。

任何想法都将不胜感激。

1 个答案:

答案 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))

现在一切正常。