2

편집 : 기본 프로그래밍을 모르는 경우 (예 : null 개체 참조를 참조하지 않는 경우) 문제가되지 않습니다.Entity Framework 6 쿼리로 NullReferenceException이 발생합니다.

편집 : Linqpad 내의 EF에서 스택 추적을 추가했습니다. 이 신비 중지 될 때까지

var menu = dbcontext.Tree.Where(t => t.Left > 2 && t.Right < 10).ToList(); 

이 잘 흥분 : EF6를 사용

, 나는 아주 간단한 쿼리가 있습니다. dbcontext.Tree은 SQL Server 2012의 뷰입니다. Linqpad5를 사용하여 기본 제공 연결을 사용하여 예상 한 결과를 얻었습니다. 프로젝트에 EF 연결을 설정하면 NRE를 얻습니다. SQL을 확인하면 SQL 쿼리 창에 복사하여 붙여 넣을 수 있으며 적절한 결과를 얻을 수 있습니다. 나는 Where 호출없이 NRE를 얻는다.

데이터베이스에서 모델을 업데이트하여 새로 고침을 시도했습니다. 모델에서 뷰를 제거하고 업데이트하려고했습니다. 나는 모델을 완전히 삭제하고 다시 만들려고했다. Visual Studio와 내 컴퓨터를 다시 시작했습니다. 쿼리에 대해 동일한 NRE를 얻습니다. 나는 내가 뭘 시도 할 수 있는지 모르겠다. 그리고이 NRE는 나에게 전혀 이해가되지 않는다. 나는 EF를 제외한 모든 것을 사용하여 기대했던 결과를 얻는다. 나는 그것이 이전에 작동하는 것을 보지 못했다면 그것을 EF와 함께 버그까지 나눌 것이다.

이 문제를 다루는 사람이 있습니까? 이러한 특정 상황을 온라인으로 검색하면 아무런 결과도 얻지 못했습니다.

스택 추적 :

at System.Data.Entity.Core.EntityKey.AddHashValue(Int32 hashCode, Object keyValue) 
at System.Data.Entity.Core.EntityKey.GetHashCode() 
at System.Collections.Generic.GenericEqualityComparer`1.GetHashCode(T obj) 
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key) 
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value) 
at System.Data.Entity.Core.Objects.ObjectStateManager.TryGetEntityEntry(EntityKey key, EntityEntry& entry) 
at System.Data.Entity.Core.Objects.ObjectStateManager.FindEntityEntry(EntityKey key) 
at System.Data.Entity.Core.Common.Internal.Materialization.Shaper.HandleEntityAppendOnly[TEntity](Func`2 constructEntityDelegate, EntityKey entityKey, EntitySet entitySet) 
at lambda_method(Closure , Shaper) 
at System.Data.Entity.Core.Common.Internal.Materialization.Coordinator`1.ReadNextElement(Shaper shaper) 
at System.Data.Entity.Core.Common.Internal.Materialization.Shaper`1.SimpleEnumerator.MoveNext() 
at System.Data.Entity.Internal.LazyEnumerator`1.MoveNext() 
+0

가능한 중복으로 신고하기 전에 묻는 질문을 완전히 이해하십시오. – Pfhoenix

+0

[Minimal, Complete, Verifiable example] (http://stackoverflow.com/help/mcve)을 포함하십시오. [좋은 질문을하는 방법] (http://stackoverflow.com/help/how-to-ask)을 읽어보십시오. 귀하의 질문은 현재 귀하의 질문에 대한 유일하고 최상의 해결책은 NRE가 무엇인지에 대한 사본이 작성 되었기 때문입니다. 당신은 스택 추적을 제공하지 않았고 실제로 무엇이 NULL인지 언급하지 않았다. (예를 들어,'dbcontext'는'null?은'dbcontext.Tree' null은 dbcontext.Tree.ToList()의 결과이거나 NRE를 던지는 것이다.), 또는 다른 세부 사항. – Igor

+0

데이터의 모든 트리는 '왼쪽'과 '오른쪽'에 대한 값을 갖고 있습니까? – trailmax

답변

0

문제는 당신의 모델 (위의 예에서 Tree가) Null을 허용하지 않은 한 광석 이상의 속성이 있다는 것이다 (가능성이 또한 매핑 Null을 허용하지으로 표시를) 이지만 데이터 저장소의 해당 열은 null입니다. 이 예외는 해당 열 (들) 중 하나에 대해 null 값을 가진 레코드가 검색 되 자마자 자체적으로 나타납니다.

  • 모델 수정 - 모델을 업데이트 할 때 널 (NULL) 값 형식에 대한 Nullable<T> 또는 ?를 사용해야하고 (속성을 통해 또는 EntityTypeConfiguration을 상속 종류 중 하나 ) 정의 매핑이있는 경우 또한 속성은 선택 사항입니다 지정 그곳에.
  • 데이터 저장소 수정 - 데이터 저장소 스키마와 데이터를 모델에서 예상 한 것과 일치하도록 변경하십시오.
관련 문제