c# – “操作无法完成,因为DbContext已被处理”异常并且禁用了延
鉴于:
public ActionResult List() { using (var unitOfWork = new UnitOfWork()) { var result = unitOfWork.Repository.Find<EntityAddress>(a => a.PostalCode == "80001"); //return View(result.ToList());//NO Exception raised with ToList() return View(result);//EXCEPTION RAISED IN VIEW DURING ITERATION } } UnitOfWork是一次性的,处理我的DbContext.它还禁用构造函数中的延迟加载: public UnitOfWork() { _dbContext.Configuration.LazyLoadingEnabled = false; Repository = new GenericRepository<MyEntities>(_dbContext); } public void Dispose() { Repository.Dispose(); } Find< EntityAddress>()实现适用于: _dbContext.Set< EntityAddress>().其中??(谓词)其中谓词是Expression< Func< EntityAddress,bool>>类型的参数. 为什么即使在禁用延迟加载后也会出现处理异常? 解决方法
懒惰和急切加载与何时加载与查询相关的实体(例如导航属性和集合)有关,而不是在加载查询本身的内容时.
IQuerable< EntityAddress>从您的存储库返回 – 无论您是否启用了延迟加载 – 在枚举之前不会在服务器上运行查询(无论是通过在foreach循环中获取枚举器,在其上调用 在这种情况下获得异常的原因是因为 如果要将查询结果传递给视图,则有两个选项: >将数据库上下文的生命周期延长到控制器的生命周期 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |