实体框架6和导航财产问题

时间:2014-06-19 20:30:18

标签: c# entity-framework wcf

我希望能在这里得到你的帮助。我是EF的新手,我遇到了一些麻烦。我正在使用Database First方法,并且在Azure中有一个数据库,我必须从中检索数据。

[DataContract]
[Table("A")]
public class AgencyDC
{

    [DataMember]
    [Key]
    public string AID { get; set; }
    public string AName { get; set; }
    public string GeneralEmailAddress { get; set; }
    public string WebsiteURL { get; set; }
    [DataMember]
    [ForeignKey("AID")]
    [IgnoreDataMember]
    public virtual AExtensionDC AExtension { get; set; }
}

[DataContract]
[Table("AExtension")]
public class AExtensionDC
{
    [DataMember]
    [Key]
    public string AID { get; set; }
    [DataMember]
    public bool? IsActive { get; set; }
    public bool? IsOptedOut { get; set; }
    public DateTime? LastUpdated { get; set; }
}

我正在尝试使用EF6在我的上下文中使用DBS提取我的记录。

public List<ADataCcontract> GetAllAs()
    {
        using (AContext _aCtx = new AContext())
        {                
            var mylist = _aCtx.A.Include("AExtension").ToList();
            return mylist;
        }            
    }

现在,我应该回来547条记录,其中只有1条记录的AExtension导航属性。其他546条记录应包含NULL。但是,出于某种原因,我只是得到了两个表中都匹配的记录。在SQL中,我只想要一个左连接,以便从AE实体返回所有行,并在AE中匹配OPTIONALLY。

我希望这是有道理的。

如果可能的话,如果你有一个修复,请你发一个我可以参考的例子吗?我真的被卡住了。

2 个答案:

答案 0 :(得分:0)

我认为这个SO答案可能会让你大部分时间? https://stackoverflow.com/a/4299667/78551

基本上Include执行左外连接或左连接,因为'外'在SQL中实际上是可选的。

答案 1 :(得分:0)

如果您的字段具有/缺乏可空性,则左侧连接/内部连接将由“.Include”执行。

要查看您的查询,请设置断点并检查此值:

  var myQuery = _aCtx.A.Include("AExtension").ToTraceString();