此 ObjectContext 实例已释放,不可再用于需要连接的操作

base {System.Exception} = {System.Reflection.TargetInvocationException: 操作过程中出现异常,结果无效。有关异常的详


细信息,请查看 InnerException。 ---> System.ServiceModel.DomainServices.Client.DomainOperationException: 查


询“GetAnchorBoltSensorCurrentDataList”的 Load 操作失败。此 ObjectContext 实例已释放,不可再用于需要连接的操作。

调用DomainService来方法的时候出现问题,调试走到

  private void AnchorBoltSensorcurrentDataDomainDataSource_LoadedData(object sender, LoadedDataEventArgs e)
        {
            busyIndicator.IsBusy = false;
        } 查看e是出现上述错误

之前方法里没有使用using。后来脑残多余的加上了,本以为能及时释放链接,只有比较好的,后来查看了很多资料,说是没必要使用using。还有说是这样:

先定义个List<User> users = new List<User>();在using的外面
在using里面赋值users=user.Tolist();
然后在using外面return users。
返回值必须是list的

经过测试,这样也不行。看来只能是把using去掉了。

#region 得到锚杆索应力传感器的实时数据
        /// <summary>
        /// 得到锚杆索应力传感器的实时数据
        /// </summary>
        /// <returns></returns>
        public List<CurrentData> GetAnchorBoltSensorCurrentDataList(int WorkingFaceID, int UserID)
        {
            //得不到工作面信息,通道信息
            //Include("ChannelProperties")不行 CurrentData和这个没有直接关系,是借助于p.Sensor中的关系
            //OfType<AnchorBoltSensor>() 不行,不是CurrentData的子类或者超类
            //前台就无法显示
            //上下文使用需要用准
            //List<CurrentData> list = new List<CurrentData>();
            //list = this.ObjectContext.CurrentDatas.Include("Sensor").Where(p => p.Sensor.SensorType == 1 && p.Sensor.Livestate == 0 && p.Sensor.WorkingFaceID == WorkingFaceID).ToList();
            //AnchorBoltSensor a = list.FirstOrDefault().Sensor as AnchorBoltSensor;
            //ChannelProperty cp = a.ChannelProperties.FirstOrDefault();


            //List<CurrentData> list1 = new List<CurrentData>();
            //list1 = db.CurrentDatas.Include("Sensor").Where(p => p.Sensor.SensorType == 1 && p.Sensor.Livestate == 0 && p.Sensor.WorkingFaceID == WorkingFaceID).ToList();






            AnchorBoltSensor a1 = list1.FirstOrDefault().Sensor as AnchorBoltSensor;
            ChannelProperty cp1 = a1.ChannelProperties.FirstOrDefault();
            string mess = a1.WorkingFace.WorkingFaceName;
            //return list1;
            List<CurrentData> list = new List<CurrentData>();
           
                if (UserID == 0)
                {
                    list = db.CurrentDatas.Include("Sensor").Where(p => p.Sensor.SensorType == 1 && p.Sensor.Livestate == 0 && p.Sensor.WorkingFaceID == WorkingFaceID).ToList();
                }
                else
                {
                    StringBuilder sb = new StringBuilder();
                    SysUser u = db.SysUsers.FirstOrDefault(p => p.UserID == UserID);
                    List<Sensor> listSensor = u.Sensors.Where(p => p.SensorType == 1).ToList();
                    StringBuilder sb_ZB = new StringBuilder();
                    sb.Append(" and it.Sensor.SensorType = 1 and it.Sensor.Livestate=0");
                    sb.Append(" and it.Sensor.WorkingFaceID = " + WorkingFaceID + "");
                    if (listSensor.Count > 0)
                    {
                        foreach (var item in listSensor)
                        {
                            // sb_ZB.Append("'");
                            sb_ZB.Append(item.ID);
                            // sb_ZB.Append("'");
                            sb_ZB.Append(",");
                        }


                        string zbList = sb_ZB.ToString().Substring(0, sb_ZB.ToString().Length - 1);


                        sb.Append(" and it.SensorID in {" + zbList + "}");
                        list = db.CurrentDatas.Include("Sensor").Where(sb.ToString().Substring(4)).ToList();
                    }//等于0说明该普通用户没有改类型下的传感器


                }
              
            


            return list;
        }
        #endregion


备注:尤其是这种使用了include()的情况,更不能使用using了。

上下文的选择也很重要,不能使用domainservice里的上下文,要使用entity framework里的上下文(此处不确定,待考查)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值