The operation cannot be completed because the DbContext has been disposed

这里写图片描述
第99行换成:
ZhaopinDbContext db = new ZhaopinDbContext();
错误消失,页面显示正常了。到这里问题已经解决,是否就应该翻篇了呢。no,这不是一个程序员应有的研究态度。我要知道为什么
ZhaopinDbContext db = new ZhaopinDbContext();可以,而ZhaopinDbContext db = ContextFactory.GetCurrentContext()就有问题了。

通过查看 ContextFactory.GetCurrentContext()类方法。是这样写的。
public class ContextFactory
{
​///
​/// 获取当前数据上下文
​///
​///
​public static ZhaopinDbContext GetCurrentContext()
​{
​​ZhaopinDbContext _nContext = CallContext.GetData(“ZhaopinDbContext”) as ZhaopinDbContext;
​if (_nContext == null)
​ ​{
​ ​​_nContext = new ZhaopinDbContext();
​CallContext.SetData(“ZhaopinDbContext”, _nContext);
​}
​ ​return _nContext;

 ​}

}
这个静态方法先通过CallContext.GetData(“ZhaopinDbContext”)读取事先存储的数据库对象,然后转换为ZhaopinDbContext,转换后再判断_nContext对象是否为null,如果为null,则重新new对象。然后把该对象存储起来,以便随后调用。最后返回ZhaopinDbContext对象。貌似没什么问题。不管了,先替换。
public static ZhaopinDbContext GetCurrentContext()
{
return new ZhaopinDbContext();
}
这样写后,页面调用正常了。这说明,上面的代码是肯定有问题的。那问题在哪里呢,还是看不出来。只能用日志输出中间变量来看了。改造上面的方法位下面的:
public static ZhaopinDbContext GetCurrentContext()
{
​ZhaopinDbContext _nContext = CallContext.GetData(“ZhaopinDbContext”) as ZhaopinDbContext;
SXF.Utils.EventLog.WriteLog(“start1”);
if (_nContext == null)
​{
​ ​_nContext = new ZhaopinDbContext();
CallContext.SetData(“ZhaopinDbContext”, _nContext);
SXF.Utils.EventLog.WriteLog(“start2”);
}
return _nContext;

}
输出的日志是这样得:
2016-09-28 09:49:14 start1

2016-09-28 09:49:14 start2

2016-09-28 09:49:15 start1

2016-09-28 09:49:16 start1

这说明,此方法在页面中被调用了3次。第一次start1,start2都输出了。说明ZhaopinDbContext _nContext = CallContext.GetData(“ZhaopinDbContext”) as ZhaopinDbContext;这句为null,所以进入了下面if条件,重新new了对象。而第二次和第三次调用由于只输出了start1,说明ZhaopinDbContext _nContext = CallContext.GetData(“ZhaopinDbContext”) as ZhaopinDbContext不为空,那怎么不为空仍然会报错:DbContext已被释放呢?只能说明虽然_nContext不为空,但是已经被系统dispose掉了。

Homebrew是一款用于在Mac OS上安装软件包的开源软件管理器。当在使用Homebrew时出现"the operation couldn't be completed. unable to locate a java runtime"的错误时,这意味着Homebrew无法定位到Java运行时环境。 出现这个错误的原因可能是由于没有正确安装Java运行时环境或者环境变量配置错误。解决这个问题的方法如下: 1. 确保已正确安装Java运行时环境。可以从Oracle官网下载并安装最新版本的Java JDK/JRE。 2. 验证Java的安装。在终端中运行"java -version"命令,确保Java成功安装并且能够正确运行。 3. 检查环境变量配置。在终端中运行"echo $JAVA_HOME"命令,确保JAVA_HOME环境变量已正确配置并指向Java的安装路径。 - 如果未配置JAVA_HOME环境变量,可以通过编辑"~/.bash_profile"或者"~/.zshrc"文件来添加配置,例如: ``` export JAVA_HOME=/Library/Java/JavaVirtualMachines/<VERSION>/Contents/Home export PATH=$PATH:$JAVA_HOME/bin ``` 4. 更新Homebrew。在终端中运行"brew update"命令,确保Homebrew是最新版本。 5. 尝试重新安装Homebrew。在终端中运行以下命令: ``` /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" ``` - 如果仍然无法解决问题,可以尝试卸载并重新安装Homebrew。 这些步骤应该能够解决"the operation couldn't be completed. unable to locate a java runtime"错误,并使Homebrew能够正确定位Java运行时环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值