2015-09-04 96 views
7

我試圖第一次使用導航屬性代替連接。我無法通過左外部連接來實現正常工作的情況。在下面的例子中,我只是在外鍵非空的情況下返回結果。我需要返回所有結果。我錯過了什麼?具有空外鍵的EF導航屬性

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

導航屬性映射:

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

查詢:

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

上下文變量是一個DbContext嗎?你可以展示你正在調用的'Shipments'方法的實現嗎? – user2697817

+0

是的。我編輯帖子來澄清這一點。這只是一個DbSet – Sam

+0

我很難過,我看不出爲什麼它不應該工作。 – user2697817

回答

1

的問題在這個例子中沒有顯示。映射由輔助類生成。在某些情況下,助手類會錯誤地使用.HasRequired()方法而不是.HasOptional()映射導航屬性。修正映射類已經解決了這個問題。