栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

解决“ ObjectContext实例已被处置,并且不能再用于需要连接的操作” InvalidOperationException

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决“ ObjectContext实例已被处置,并且不能再用于需要连接的操作” InvalidOperationException

默认情况下,实体框架使用延迟加载来导航属性。这就是为什么应将这些属性标记为虚拟的原因-
EF为您的实体创建代理类,并覆盖导航属性以允许延迟加载。例如,如果您有此实体:

public class MemberLoan{   public string LoandProviderCode { get; set; }   public virtual Membership Membership { get; set; }}

实体框架将返回从该实体继承的代理,并向该代理提供DbContext实例,以允许稍后延迟加载成员资格:

public class MemberLoanProxy : MemberLoan{    private CosisEntities db;    private int membershipId;    private Membership membership;    public override Membership Membership     {        get        {          if (membership == null)   membership = db.Memberships.Find(membershipId);          return membership;       }       set { membership = value; }    }}

因此,实体具有用于加载实体的DbContext实例。那是你的问题。您对

using
CosisEntities的用法有所了解。它在返回实体之前布置上下文。稍后某些代码尝试使用延迟加载的导航属性时,它会失败,因为此时已处理上下文。

要解决此问题,您可以使用后面将急需的导航属性加载:

IQueryable<MemberLoan> query = db.MemberLoans.Include(m => m.Membership);

这将预加载所有成员身份,并且不会使用延迟加载。有关详细信息,请参阅MSDN上的“
加载相关实体 ”。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/421549.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号