2017-01-24 4 views
0

데이터베이스의 모든 항목을 거쳐 다시 가져온 코드를 해독해야하는 코드가 있습니다. 게으른 로딩은 좋은 방법이라고 들었지만 실제로 무엇이 있는지조차 알지 못합니다. 나는 그것에 관해 읽었다. 그러나 나는 아직도 불분명하다. 다음은 필요한 모든 항목을 가져 오는 코드입니다. 시스템에 문제를 일으키지 않도록 어떻게 지연로드합니까?bool에서 느린 로딩

var potentialNumbers = _db.Owners.Where(x => x.UNQ4.Equals(submittedUNQ.Substring(submittedUNQ.Length - 4))).ToList().Select(o => o.UNQ).ToList(); 
+0

'UNQ4'가 '문자열'이라고 가정 할 때 여기에는 지연로드가 관련되어 있지 않습니다. 지연로드는 네비게이션 속성 (그리고 네비게이션 속성에 쿼리 할 때가 아닌 실제로 액세스 한 경우)에만 적용 할 수 있습니다. https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx – haim770

+0

참조 모델의 코드도 게시해야합니다. – Sparrow

+0

지연된 실행이 벌어지고있는 것을 억제하고, 응용 프로그램에서 DB에 의해 수행 될 수있는 작업을 강제로 수행하는 모든 'ToList' 호출을 제거하는 것으로 시작하십시오. 당신은 말 그대로 유용한 것을 이루지 못하는 여분의 일을하는 당신의 길을 벗어나고 있으며, 당신이하려고하는 것을 적극적으로 억제합니다. – Servy

답변

0

기본적으로 Entity Framework의 지연로드는 켜져 있습니다. 무언가를 '게으름로드'하도록 강요 할 수는 없습니다. 당신이 할 수있는 일은 게으른 로딩을 끄는 것입니다 (그런데 실제로는 열심히로드하는 것이 아니라 '로딩하지 않는'것입니다). 그래서 대답은 당신이 할 수 없다는 것입니다. Owners 클래스는, 예를 들어, 같은 탐색 속성이있는 경우 의견이 지적한대로 같은 var owners = _db.Owners.First()으로 쿼리를 수행 할 때 실제로, 그러나,

public class Owners{ 
    public string UNQ4 {get;set;} 
    public virtual OtherClass NavigationProperty {get;set;} 
} 

그런 다음 NavigationProperty 속성은 처음 null의 값을가집니다. 나중에 프로그램에서 owners (owners.NavigationProperty.Name과 같은) NavigationProperty에 액세스하면 데이터베이스에 대한 여행을 통해 관련 NavigationProperty 데이터를 가져옵니다.

게으른 로딩 효과적으로로드되지 않습니다 탐색 속성가 필수 경우/때까지. 좋은 참조 : https://msdn.microsoft.com/en-us/library/jj574232(v=vs.113).aspx

+0

과 같은 방법으로 얻을 수 있지만 매우 유익합니다! – BlowFish

+0

도움이 되니 다행입니다. – coolboyjules