문제

그래서 개발중인 프레임 워크의 버그를 수정했습니다.의사-의사 코드는 다음과 같습니다. 라코 디스 그래서 본질적으로 캐시에서 객체를 가져온 다음 나중에 원래 객체를 캐시 된 객체와 비교하여 변경된 경우 데이터베이스에 저장해야하는지 확인했습니다.원래 객체가 참조이기 때문에 문제가 발생했습니다. 따라서 someValue를 변경하면 참조 된 캐시 된 객체도 변경되어 데이터베이스에 다시 저장되지 않습니다.캐시 된 버전에서 객체를 복제하고 참조를 분리하고 새 객체를 캐시 된 객체와 비교할 수 있도록하여 수정했습니다.

제 질문은 다음과 같습니다. 이 작업을 수행하는 더 좋은 방법, 권장 할 수있는 패턴이 있습니까? 이전에이 작업을 수행 한 유일한 사람이 될 수는 없습니다. :)

도움이 되었습니까?

해결책

더러운 추적은이를 처리하는 일반적인 방법이라고 생각합니다.다음과 같은 것 : 라코 디스

다른 팁

나도 비슷한 일을했지만 복제를 통해 해결했습니다.차이점은 캐시가 복제를 수행한다는 것입니다.개체를 캐시에 넣으면 캐시는 먼저 개체를 복제하고 복제 된 버전을 저장합니다 (따라서 캐시를 손상시키지 않고 원본 개체를 변경할 수 있음).캐시에서 객체를 가져 오면 캐시는 저장된 객체 대신 객체의 복제본을 반환합니다 (다시 호출자가 캐시 된 / 표준 객체에 영향을주지 않고 객체를 변경할 수 있음).

저장 / 복제하는 데이터가 작은 한 완벽하게 수용 할 수 있다고 생각합니다.

linq를 사용할 때 Marks anwser가 약간 개선되었습니다.

Linq를 사용할 때 DB에서 항목을 가져 오면 모든 개체가 IsDirty로 표시됩니다. 값이 설정되지 않은 경우 IsDirty를 설정하지 않음으로써이 문제를 해결했습니다.이 경우 : null 일 때.int의 경우 orig-value를 -1로 설정 한 다음 확인했습니다.그러나 저장된 값이 초기화되지 않은 값과 같으면 작동하지 않습니다 (예에서는 null). 라코 디스

어떻게 든 초기화 후 IsDirty를 설정하면 더 개선 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top