使用ASP.NET MVC 5和Entity Framework 6,我试图从数据库中获取用户具有的所有通知值的列表。这段代码确实可以正常工作,现在尝试将列表发送回javascript时,我得到了ObjectDisposedException
。
控制器方法:
public JsonResult NotifPrefsOpen()
{
try
{
List<NotificationPreference> notifPreference;
using (MEDContext MContext = new MEDContext())
using (StaffContext SContext = new StaffContext())
{
AuthorizationUtil au = new AuthorizationUtil(HttpContext, MContext, SContext);
PreferenceService ps = new PreferenceService(MContext);
notifPreference = ps.NotificationAllGet(au.EmployeeNumber);
return Json(new { Success = true , notifPreference});
}
}
catch (Exception ex)
{
Response.StatusCode = (int)HttpStatusCode.InternalServerError;
string msg = LogError(GetType().FullName, ex);
return Json(new { Success = false, ErrorMessage = msg });
}
}
服务方法
public List<NotificationPreference> NotificationAllGet (int employeeNumber)
{
IQueryable<NotificationPreference> result =
(from n in _context.NotificationPreference
where n.employeeNumber == employeeNumber
select n);
return result.ToList();
}
这里是例外:
System.Reflection.TargetInvocationException:调用的目标引发了异常。
System.ObjectDisposedException:ObjectContext实例已被处置,不能再用于需要连接的操作。
在System.Data.Entity.Core.Objects.ObjectContext.get_Connection()
在System.Data.Entity.Core.Objects.ObjectQuery1.GetResults(Nullable
1 forMergeOption)上
在System.Data.Entity.Core.Objects.ObjectQuery1.Execute(MergeOption mergeOption)
1.Load(MergeOption mergeOption)处
at System.Data.Entity.Core.Objects.DataClasses.EntityReference
在System.Data.Entity.Core.Objects.DataClasses.RelatedEnd.DeferredLoad()处
在System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior.LoadProperty [TItem](TItem属性值,字符串关系名称,字符串targetRoleName,布尔值mustBeNull,对象wrapperObject)
在System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior。<> c__DisplayClass7`2.b__2(TProxy代理,TItem项)
在System.Data.Entity.DynamicProxies.NotificationPreferen_93CF7ED7D23D42FE98298039206E4A93E5B136BB3DCBF9EFA5D02A3E8330CADF.get_AppUser()
答案 0 :(得分:0)
System.Data.Entity.Core.Objects.Internal.LazyLoadBehavior。
在处置DbContext之后,JSON序列化正在触发Lazy Loading。因此,请禁用它,并在构造JsonResult之前确保要加载要序列化的所有相关实体。