外键为空的EF导航属性

本文关键字:EF 导航 属性 | 更新日期: 2023-09-27 18:11:08

我第一次尝试使用导航属性来代替连接。我不能得到的情况下,它通常会完成与左外连接。在下面的示例中,我只得到外键非空的结果。我需要所有的结果。我错过了什么?

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

外键为空的EF导航属性

这个例子中没有显示这个问题。映射是由助手类生成的。在某些情况下,helper类错误地使用. hasrequired()方法而不是. hasoptional()方法映射导航属性。修正映射类已经修复了这个问题。