1

SO中有很多错误,但我认为这种情况有所不同。

我有一些运行良好的代码,我更新了一个实体等。但问题是它正在被缓存,当我用 AsNoTracking() 禁用缓存时,它开始抛出这个异常;

我所做的如下: 1. 在页面中我得到一个 EcoBonusRequest。2. 用户点击一个按钮并修改当前状态属性,并将一个列表项添加到工作流历史集合(ecobonusrequest 对象的关联集合)中。3.我调用udpate方法,设置状态为修改,这里抛出异常。

这是我的代码>

EcoBonusRequestRepository.cs

public void UpdateEcoBonusRequest(EcoBonusRequest ecoBonusRequest)
            {
                _context.EcoBonusRequests.Attach(ecoBonusRequest);
                _context.Entry(ecoBonusRequest).State = EntityState.Modified;
            }

EcoBonusRequestBL

public void Update(EcoBonusRequest ecoBonusRequest)
        {
            DALFacade.UpdateEcoBonusRequest(ecoBonusRequest);
        }

生态红利请求页面

public void ChangeStatus(EcoBonusRequest ecoBonusRequest, string stepname, string who, string choosenoption)
        {

            ecoBonusRequest.WorkflowHistories = new List<WorkflowHistory>
                                                   {
                                                       new WorkflowHistory()
                                                           {
                                                               Date = DateTime.Now,
                                                               What = choosenoption,
                                                               StepName = stepname,
                                                               Who = who
                                                           }
                                                   };

            ecoBonusRequest.CurrentStatus = _currentStepBlo.StepName;
            var ecoBonusRequestBL = new EcoBonusRequestBL();
            ecoBonusRequestBL.Update(ecoBonusRequest);
        }

这就是我首先获取对象的方式:(我不会在此处粘贴所有层的所有代码)

protected override void OnInit(EventArgs e)
        {
            var requestBaseId = RequestBaseId;
            if (requestBaseId != null)
            {
                EcoBonusRequest request = GetDBRequest(requestBaseId.Value);

在达尔

public IQueryable<EcoBonusRequest> FindEcoBonusRequests(System.Linq.Expressions.Expression<Func<EcoBonusRequest, bool>> predicate)
            {
                return _context.EcoBonusRequests.AsNoTracking().Where(predicate);
            }
4

1 回答 1

3

是的,这是一个有趣的问题,这里的问题来自尝试重新附加一个已经附加到上下文的实体。这可能来自逻辑错误,或者您可能在未清除附加对象的情况下重用上下文。数据库上有一个本地集合,您可以使用它来查看当前附加到上下文的项目。

ctx.YourEntityCollection.Local
于 2012-06-18T11:14:35.987 回答