2015-09-04 13 views
7

Próbuję użyć właściwości nawigacyjnych po raz pierwszy zamiast wykonywania połączeń. Nie mogę znaleźć sytuacji, w której normalnie byłoby działać z lewym złączem zewnętrznym. W poniższym przykładzie otrzymuję wyniki tylko wtedy, gdy klucz obcy nie ma wartości null. Potrzebuję wszystkich wyników. czego mi brakuje?EF Navigation Właściwość z pustym kluczem obcym

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;} 
} 

nawigacji odwzorowania obiektu:

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

zapytania:

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

Czy zmienna kontekstowa jest DbContext? Czy możesz pokazać implementację metody 'Shipments', do której dzwonisz? – user2697817

+0

Tak, jest. Edytuję post, aby to wyjaśnić. To tylko DbSet – Sam

+0

Jestem zaskoczony, nie widzę powodu, dlaczego to nie powinno działać. – user2697817

Odpowiedz

1

Problem ten nie został pokazany w tym przykładzie. Odwzorowania są generowane przez klasę pomocniczą. W niektórych przypadkach klasa pomocnika niepoprawnie mapowała właściwości nawigacji za pomocą metody .HasRequired() zamiast metody .HasOptional(). Poprawienie klasy mapowania rozwiązało problem.