左外部与实体框架核心连接

本文关键字:核心 连接 框架 实体 外部 | 更新日期: 2023-09-27 18:25:51

我正在尝试使用EF7(7.0.0-rc1-final)、vNext rc1(rc1-final)和SQL Server 2014 执行左外部加入请求

数据库:

宠物:Id,名称

用户:Id,Name,#PetId

这个有效:

var queryWorks = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     Pet = p
                 };

但这个不起作用(消息="序列不包含任何元素"):

var queryFails = from u in _context.Users
                 join p in _context.Pets on u.PetId equals p.Id into pp
                 from p in pp.DefaultIfEmpty()
                 select new {
                     UserName = u.Name,
                     PetName = (p == null ? "NULL" : p.Name)
                 };

SQL Server Profile 2014显示第二个请求没有发送到SQL Server。为什么?

左外部与实体框架核心连接

我认为第二个查询的投影中的p.Name没有被处理。

截至RC1,EF7还不知道如何进行左外部联接。简言之,他们意识到这是一件非常重要的事情,他们正在努力

它在github上的第3186期中被报道,一些开发者对此发表了评论

我又责备了自己一句,有点像你。

合作者"maumar"评论:

问题是在Linq(to对象)中LOJ的概念并不存在就其本身而言。

建议的修复方案是使用表示可选导航选择Many GroupJoin DefaultIfEmpty组合,然后折叠此模式转换为关系管道中的LOJ。问题是创建更复杂的查询(主要是由于子查询),并且当前对于大多数非琐碎的情况中断。在我们用导航属性扩展。

我们确实认识到这是一个高优先级的错误,因为它可能会返回错误的结果。