2017-03-07 5 views
0

.NET 4.5.2, EF6 및 SQL2016을 사용하고 있습니다. 일부 지역은 null이 될 것 CountryGUID 그래서 COUNTRYNAME 필드가없는SQL 뷰는 null이 아닌 EF 필드에서 null을 반환합니다.

public string CountryName{get;set;} 

: 나는 이벤트 정보를 DataModel.tt이처럼 아래

CREATE VIEW [dbo].[vVisitEvent] 
AS 
SELECT 
ev.[GUID] as EventID, 
vt.[GUID] as VisitorID, 
cr.Name as CountryName 
FROM [Event] ev 
    INNER JOIN (
    [Location] lc 
    LEFT JOIN [Country] cr ON lc.CountryGUID = cr.GUID 
) ON ev.LocationGUID = lc.GUID 

vVisitEvent.cs을 끌어 SQL을 볼 수 있습니다. LEFT JOIN을 사용했고 SQL Studio에서 제대로 실행되었습니다. 이벤트 위치에 CountryGUID가없는 경우 CountryName이 null 인 모든 이벤트를 반환했습니다. 그러나 Visual Studio에서 다음과 같은 오류가 발생하고 null로 인한 것 같습니다. CountryName :

System.NullReferenceException: Object reference not set to an instance of an object. 
    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.Collections.Generic.List`1..ctor(IEnumerable`1 collection) 
    at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) 

어떤 아이디어 나 가능한 해결책이 있습니까? 감사!

+0

잘 모르겠지만 보기에 매핑하는 것과 관련이있다. 엔티티의 적어도 하나의 컬럼에 대해'[Key] '를 지정 했습니까? 이것이 데이터베이스를 먼저 사용하는 경우 키 정보를 사용할 수 없습니다 (PK를 정의하는 테이블에 매핑하는 것과 반대). – Alexei

+0

LINQ to Entities를 사용하거나 사용자 지정 SQL 쿼리를 실행하고 있습니까? 내 생각에 사용자 지정 SQL을 사용하여 데이터를 검색하는 경우 매핑 문제입니다. – ali

+0

보기가 고유 한 행을 반환합니까, 그렇다면 어떤 필드 또는 필드의 조합이 고유합니까? –

답변

0

알아 냈습니다. 그것은 먼저 db이고 vVisitEvent가 edmx (데이터베이스에서 업데이트)에 추가되면 EF는 CountryName이 DB 키라고 생각하고 <key> 아래에 넣습니다. edmx 다이어그램에서 'db key'를 수동으로 선택 해제해야했습니다.