Entity framework 4 不存在关联时选择相关实体

Entity framework 4 不存在关联时选择相关实体,entity-framework-4,linq-to-entities,Entity Framework 4,Linq To Entities,EF4非常适合拉入关联数据,但当关联不明确时,您会怎么做?一个例子说明了我的情况: 主表有一个child1Id和child2Id列 有两个表Child1和Child2具有相应的主键child1Id和child2Id。有Master、Child1和Child2实体 主表和Child1/Child2表或实体之间没有外键或实体框架关联 当主表中只有匹配的子ID时,如何从两个子表中选择主记录和相应的子记录 我不能改变一种关系或联系 Richard您必须通过linq手动选择实体。下面是如何在两个表之间进行

EF4非常适合拉入关联数据,但当关联不明确时,您会怎么做?一个例子说明了我的情况:

主表有一个child1Id和child2Id列

有两个表Child1和Child2具有相应的主键child1Id和child2Id。有Master、Child1和Child2实体

主表和Child1/Child2表或实体之间没有外键或实体框架关联

当主表中只有匹配的子ID时,如何从两个子表中选择主记录和相应的子记录

我不能改变一种关系或联系


Richard

您必须通过linq手动选择实体。下面是如何在两个表之间进行左联接:

var query = from m in context.Masters
            where m.Id == 1
            join c in context.Childs on m.Child.Id equals c.Id into leftJoin
            from x in leftJoin.DefaultIfEmpty()
            select new
                {
                    Id = x.Id,
                    Name = x.Name,
                    Child = x.Childs
                };

顺便说一句,如果你的实体有一个属性,其中包含来自其他实体的PK值,你可以在其中创建关系。在这种情况下,您将能够使用导航属性。

我也有类似的情况。。父级和子级共享在EF/DB中没有显式关联。因此,我在Parent.partial.cs类文件中添加了一个子属性。是否有一种方法可以使用查询选择器(但“选择m”使EF具体化主对象),然后以某种方式在线填充.Child属性,以便EF实际生成一个连接,该连接返回子对象并同时具体化它们?(本质上,关联是动态的)。。目前我必须做一些像选择新的{Parent=parents,Children=Children}。。但这意味着我必须花更多的时间将其填充到父项中:var results=q.Select(x=>{var p=x.Parent;p.Children=x.Children;return p;});(我有一个S/O问题)