簡體   English   中英

ObjectStateManager中已存在具有相同鍵的對象。 使用AsNoTracking時

[英]An object with the same key already exists in the ObjectStateManager. when using AsNoTracking

SO中有很多錯誤,但我認為這種情況有所不同。

我有一些工作正常的代碼,我更新一個實體,等等。但問題是它被緩存,當我使用AsNoTracking()禁用緩存時,它開始拋出此異常;

我做了以下幾點:1。在頁面中,我獲得了EcoBonusRequest。 2.用戶單擊一個按鈕,它會修改currentstatus proeprty,並將一個列表項添加到工作流歷史的集合中(ecobonusrequestobject的相關集合)。 3.我調用udpate方法,將狀態設置為modified,這里拋出了異常。

這是我的代碼>

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);
        }

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);
            }

是的,這是一個有趣的問題,這里的問題來自於試圖重新附加已經附加到上下文的實體。 這可能來自邏輯錯誤,或者您可能在不清除附加對象的情況下重用上下文。 數據庫上有一個本地集合,您可以使用它來查看當前附加到上下文的項目。

ctx.YourEntityCollection.Local

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM