我有一个 WCF 服务,它在我的 Repository 对象之一中调用以下方法,以在数据库中创建一个新的销售对象
public static Sale New(Sale sale)
{
using (var ctx = new DBcontext())
{
ctx.Sales.AddObject(sale);
ctx.SaveChanges();
return sale;
}
}
调用此方法的 WCF 方法如下所示
public Sale SaleNew(Sale sale)
{
return SaleRepository.New(sale);
}
当我从客户端应用程序调用它时,出现以下错误
“底层连接已关闭:连接意外关闭。”
如果我单步执行所有代码似乎运行良好并且记录被插入到数据库中。如果我在 SaveChanges 之后将以下行添加到我的存储库方法中,它可以正常工作
ctx.Detach(sale);
发生异常是因为我在方法返回后立即处理上下文吗?以这种方式使用实体上下文是不好的做法(即立即处理它)吗?我这样做只是因为它是 SOA 并且几乎是无状态的,所以我所有的存储库方法创建上下文返回值并处置上下文。传入的任何内容都将添加到上下文中或重新附加。
按照建议,我打开了 WCF 中的跟踪并观察发生了什么。发生代理异常。在本例中,由于我使用自己的 POCO 对象,我并不真正需要代理对象,因此我将 DatabaseContext 中的 ContextOptions.ProxyCreationEnabled 属性设置为 false,现在可以正常工作了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)