我希望能在这里得到你的帮助。我是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。
我希望这是有道理的。
如果可能的话,如果你有一个修复,请你发一个我可以参考的例子吗?我真的被卡住了。
答案 0 :(得分:0)
我认为这个SO答案可能会让你大部分时间? https://stackoverflow.com/a/4299667/78551
基本上Include执行左外连接或左连接,因为'外'在SQL中实际上是可选的。
答案 1 :(得分:0)
如果您的字段具有/缺乏可空性,则左侧连接/内部连接将由“.Include”执行。
要查看您的查询,请设置断点并检查此值:
var myQuery = _aCtx.A.Include("AExtension").ToTraceString();