안녕하세요 블레이저강의 3번째 편이 올라와서 반가웠습니다.
블레이저로 개발을 하고 있는데 한가지 문제가 부닥쳤습니다.
ef core 로 repository를 만들어 블레이저 페이지내에서 DI를 사용했는데
리스트를 GetAllAsync후 DB에서 자료를 수정했을때 다시 GetAllAsync하면 수정된 자료가 반영이 되지 않습니다. 그래서 구글링해서
_context.ChangeTracker.QueryTrackingBehavior = Microsoft.EntityFrameworkCore.QueryTrackingBehavior.NoTracking; 트랙킹을 비활성화 해서
수정된 자료로 검색하는데는 성공했습니다.
그런데 문제가 수정에서 또 발생했습니다.
public async Task<bool> EditAsync(EX_EVENT model)
{
_context.tbl_EX_EVENTS.Attach(model);;
_context.Entry(model).State = EntityState.Modified;
return (await _context.SaveChangesAsync() > 0 ? true : false);
}
EditAsync로 수정시 한번은 수정이 되나 두번째 같은 자료를 EditAsync 하면
Message = "The instance of entity type 'EX_EVENT' cannot be tracked because another instance with the same key value for {'EX_EVENT_NUM'} is already being tracked. When attaching existing entities, ensure that only one entity instance with a given key value is attach...
이런 에러가 뜹니다.
트랙킹을 활성화하고 아예 페이지를 강제로 리로드하면 DI가 다시 생성이 되어 최근 데이터로 검색도 되고 문제는 안생기는 추후 scope를 사용하면 다 날라가게되어 좋은 방법이 아닌것 같아 방법을 찾고 있습니다.
그리고 혹시 페이지를 리로드 하지 않고도 DI를 재 생성할 수 있는 방법이 있을까요?
결국 이러다 ef core 포기하고 dapper로 가야하나 고민중입니다.