我正在做一个项目的Web服务,我有一个问题,我似乎无法弄清楚。我认为它是关于延迟加载和我的使用声明的东西。
继承我的代码:
public List<MediumRole> MediumGetParticipants(int mediumId, int itemsPrPage, int page)
{
Medium medium = MediaHelper.GetMedium(mediumId);
// Check if media not is null
if (medium == null) return null;
return medium.MediumRoles.Page(page, itemsPrPage).ToList();
}
我得到一个例外
System.ObjectDisposedException:ObjectContext实例已被释放,不能再用于需要连接的操作。 任何人?
答案 0 :(得分:1)
据我所知,Medium
类对MediumRoles
的集合进行了延迟加载代理引用。
由于MediaHelper.GetMedium(mediumId)
方法处理引用Medium
的数据库上下文而导致异常。
要解决此问题,您可以执行以下操作:
public static List<MediumRole> MediumGetParticipants(int mediumId, int itemsPrPage, int page)
{
Medium medium = MediaHelper.GetMedium(mediumId);
// Check if media not is null
if (medium == null) return null;
using (var context = new DbContext())
{
context.Attach(medium);
return medium.MediumRoles.Page(page, itemsPrPage).ToList();
}
}
答案 1 :(得分:0)
我猜你使用了Entity Framework,启用了延迟加载(这是默认设置),并在ObjectContext
方法中配置了EF的GetMedium
。当您访问MediumRoles
属性时,EF希望延迟加载集合,但它不能,因为ObjectContext
已经处理掉了。要解决此问题,您可以更改代码,以便在调用ToList
后处理上下文,或者在MediumRoles
方法中急切加载GetMedium
集合。