Visual Studio 2010에서 C#을 사용하여 Entity Framework 4를 사용하고 있습니다.포함 된 항목이 실제로 포함되지 않는 이유는 무엇입니까?
다양한 탐색 속성이 포함 된 개체 집합을 반환하는 리포지토리에서 사용되는 메서드가 있습니다. 최근까지이 방법은 다음과 같습니다.
private IEnumerable<VRTSystem> GetSystems() {
return ctx
.Include(s => s.Customer.CustomerType)
.Include(s => s.VRTSystemProductConfigurations);
}
... 여기서 ctx는 제네릭 유형 VRTSystem의 ObjectSet입니다. 전체 메서드는 훨씬 더 많았습니다. 이보다 포함 시키십시오. 그러나 이것은 요점을 보여주기에 충분합니다.
이 작업은 정상적으로 작동했지만 활성 플래그가 true로 설정된 VRTSystemProductConfigurations 만 반환되도록 코드를 추가해야했습니다. 일반적으로 이러한 상황에 주어진 조언에 따라, 나는
private IEnumerable<VRTSystem> GetSystems() {
return ctx
.Include(s => s.Customer.CustomerType)
.Include(s => s.VRTSystemProductConfigurations)
.Select(s => new {
System = s,
VRTSystemProductConfigurations = s.VRTSystemProductConfigurations.Where(pc => pc.Active)
})
.Select(s => s.System);
}
그러나,이 새로운 버전은 모든 null의 탐색 속성 중 하나를 포함하지 않는 ... 같이하는 코드를 변경했습니다.
아무도 아이디어가 없습니까?
흠, 내가 지금 무엇을했는지 확신 할 수 없지만,이 문제를 해결하기 위해 어느 시점에서 AsEnumerable()을 사용했음을 확신합니다. 그것은 그것을하는 정상적인 방법의 일부입니다. 나는 그것을 잘못된 장소에 넣었는지 궁금합니다. 어쨌든, 당신이 보여 주신대로 추가했고, 지금은 작동합니다. 그래서 고마워요. 그러나 VRTSystemProductConfigurations를 포함하고 싶지 않은 이유가 확실하지 않습니다. 어쩌면 나는 이러한 엔티티가 WCF를 통해 전송되므로 게으른로드를 비활성화 했으므로 모든 것을 열심히 포함해야한다고 지적 했어야합니다. 그 일이 바뀌는 지 모르겠다. 그렇지 않다면 내가 왜 그들을 포함해야한다고 생각하는지 설명해주십시오. –
활성 VRTSystemProductConfigurations 만로드하기 때문입니다. 그렇지 않습니까? 모두 포함시키지 않겠습니까? –
예,하지만 지연로드가 해제 된 경우 include를 사용하지 않으면로드되지 않습니다. 내가 아는 한, 이것이 게으른 로딩을 사용하지 않을 때 할 수있는 유일한 방법이다. –