ここSOには多くのエラーがありますが、このシナリオは違うと思います。
正常に機能しているコードがあったり、1つのエンティティを更新したりしました。しかし、問題は、AsNoTracking()でキャッシュを無効にすると、キャッシュされていたため、この例外がスローされ始めたことです。
私が行うことは次のとおりです。1。ページでEcoBonusRequestを取得します。2.ユーザーがボタンをクリックすると、現在のステータスプロパティが変更され、ワークフロー履歴のコレクション(ecobonusrequestobjectの関連コレクション)にリストアイテムが追加されます。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);
}
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);
}