아마도 원래의 질문은 너무 많은 불필요한 세부 사항으로 인해 너무 오래 지속되었다고 생각합니다. 따라서 이것은 단순화하려는 시도입니다.Linq에서 SQL 로의 엔티티 캐싱/변경 추적 동작을 오버라이드
다음 작업 중을 수행 할 수있는 방법을 찾고 있습니다. 나는 오직 하나만 할 필요가 있습니다. 누구라도이 중 하나에 대한 답을 알고 있다면 답장하십시오. DataContext
중
풀 엔티티를
ExecuteQuery
또는ExecuteMethodCall
를 통해 그 실체를 추적하지 않고 : 그래서, SQL Linq에에서 다음 중 하나를 수행 할 수 있습니다?호출
ExecuteQuery
또는ExecuteMethodCall
나는 항상 그 실체가 이미 검색했다하더라도, 데이터베이스에서 검색 결과의 신선한 사본을 받아 신원 캐시에 이미 보장?Linq to SQL은 특정 엔티티 유형에 대한 변경 추적을 수행하지 않지만 다른 유형의 변경 사항 추적은 허용합니까?
제한 :
Refresh
방법은 밖으로 질문; 엔티티의 수가 상당히 많아서 성능상의 재앙이됩니다.이 나는 단순히
DataContext
쿼리가 실행 된 후true
로 다시 설정을 허용하지 않기 때문에,false
-ObjectTrackingEnabled
를 설정하고, 나는 개체의 일부 추적해야 할 수 없습니다.또한 원래
DataContext
을 버리고 새 것을 사용할 수 없습니다. 나는 거래의 중간에 이것을 할 수 있어야한다.
이것은 심각한 문제가되기 시작하고, 난 정말 기본 동작이 잘못 생각하고 있다고 생각. 임시 쿼리 나 저장 프로 시저를 실행하면받은 결과가 해당 쿼리에서 반환 한 정확한 결과가 될 것으로 예상됩니다. 단지 의미가 있습니다. 오래된 엔티티 엔티티가 필요하다면 왜 데이터베이스로 돌아가서 가져올 수 있습니까?
현재로서는 (a) 특별히 쿼리에 대해 새 DataContext
을 만들고 트랜잭션 격리 수준을 무시하거나 (b) 반환 유형을 해당 엔티티와 동일한 "DTO"로 설정하십시오. 모든 방법이 있지만 [Table]
특성이없는 경우 AutoMapper를 사용하여 원본 엔터티에 매핑하십시오. 이 두 가지 모두 끔찍한 해킹처럼 보입니다.
누군가가이 수수께끼에 어떤 제안을 주셔서 감사합니다.
답해 주셔서 감사합니다. 트랜잭션은 실제로 하나의 작업 단위이며 중간에 별도의 'DataContext'를 사용하면 DTC로 승격됩니다. 컬럼 데이터로부터 새로운 객체를 생성하는 것은 좋은 지적이지만 유감스럽게도 데이터베이스에서 검색된 원래의 엔티티는 여전히 캐시됩니다 - 그것은 추적되지 않은 복사본에 대한 변경 일 뿐이므로 오래된 것을 해결하지 못합니다 - 데이터 문제. – Aaronaught
그래, 나는 DTC에 승진시키는 것이 무슨 뜻인지 안다. 그것은 괴롭다. 귀하의 방법은 지금 당장 유일하게 실행 가능한 경로일지도 모릅니다. – technophile