2017-03-07 4 views
0

J'utilise .NET 4.5.2, EF6 et SQL2016. J'ai vue sql qui tire les informations d'événementSQL View renvoie null sur un champ EF non nul

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 

Les vVisitEvent.cs sous DataModel.tt est comme ceci:

public string CountryName{get;set;} 

Certains endroits ne disposent pas d'un CountryGUID champ si CountryName serait nulle. J'ai utilisé LEFT JOIN et il a fonctionné correctement dans SQL studio. Il a renvoyé tous les événements avec CountryName null si l'emplacement de l'événement n'a pas de CountryGUID. Cependant, je suis l'erreur suivante dans Visual Studio et il semble être causé par le CountryName null:

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) 

Toutes les idées ou solutions possibles? Merci!

+0

Pas sûr, mais il semble être lié à la cartographie à la vue. Avez-vous spécifié le '[Key]' pour au moins une colonne de l'entité? Si c'est d'abord la base de données, les informations clés ne sont pas disponibles (par opposition à la mise en correspondance avec une table qui définit un PK). – Alexei

+0

Utilisez-vous LINQ to Entities ou exécutez-vous Sql Query personnalisé? Si vous utilisez Sql personnalisé pour récupérer des données, à mon avis, c'est le problème de mappage. – ali

+0

La vue renvoie-t-elle des lignes uniques et, si oui, quel champ ou combinaison de champs est unique? –

Répondre

0

J'ai compris. Il est db en premier et quand vVisitEvent est ajouté à edmx (mise à jour de base de données) EF pense que CountryName est une clé DB et le mettre sous <key> Je devais manuellement décocher 'db key' dans le diagramme edmx