细信息,请查看 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里的上下文(此处不确定,待考查)