2015-09-04 21 views
7

Sto tentando di utilizzare le proprietà di navigazione per la prima volta al posto di join. Non riesco a far funzionare una situazione dove normalmente si farebbe con un join esterno sinistro. Nel seguente esempio, sto ottenendo solo i risultati in cui la chiave esterna non è nulla. Ho bisogno di tutti i risultati. Cosa mi manca?Proprietà navigazione EF con chiave esterna nulla

public class User 
{ 
    [Key] 
    public int UserID {get;set;} 

    public String Name {get;set;} 
} 

public class Shipment 
{ 
    [Key] 
    public int ShipmentID {get;set;} 

    public int? SignedForByID {get;set;} 

    [ForeignKey("SignedForByID")] 
    public virtual User SignedForBy{get;set;} 
} 

navigazione mapping di proprietà:

Shipment.HasOptional(x=> x.SignedForBy).WithMany() 
.HasForeignKey(y=> y.SignedForByID).WillCascadeOnDelete(false); 

query:

var data = (from s in context.Set<Shipment>() 
      select new { 
        ShipmentID = s.ShipmentID, 
        SignedForBy = s.SignedForBy 
         }); 
+0

La variabile di contesto è un DbContext? Puoi mostrare l'implementazione del metodo 'Spedizioni' che stai chiamando? – user2697817

+0

Sì, lo è. Modifico il post per chiarire questo. È solo un DbSet – Sam

+0

Allora sono perplesso, non vedo perché non dovrebbe funzionare. – user2697817

risposta

1

Il problema non è stato mostrato in questo esempio. I mapping sono generati da una classe helper. In alcuni casi, la classe helper ha mappato in modo errato le proprietà di navigazione con il metodo .HasRequired() invece di .HasOptional(). Correggere la classe di mappatura ha risolto il problema.

Problemi correlati