2011-04-12 61 views
1

EF4非常适合提取相关数据,但当关联不明确时,您会做什么?一个例子说明了我的情况:当没有关联存在时选择相关实体

MasterTable有一个child1Id和child2Id列。

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

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

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

我无法翻新关系或关联。

Richard

回答

0

您必须通过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 
       }; 

Btw。如果您的实体拥有包含来自其他实体的PK值的财产,您可以在EF designer中创建关系。在这种情况下,您将能够使用导航属性。

+0

我有类似的情况..父母与子女在EF/DB中没有明确的关联。所以我在Parent.partial.cs类文件中添加了一个Child属性。有没有一种方法可以使用查询选择器 - 但是'选择m'因此EF实现了主对象 - 然后以某种方式将.Child属性全部在内部填充,这样EF实际上会生成一个返回子对象并同时实现它们的连接? (基本上,即时联系) – JoeBrockhaus 2013-05-01 21:50:57

+0

..目前我必须做一些类似于选择新的(Parent = parents,Children = children} ..但这意味着我必须花费更多的周期将其填充到Parent:var results = q中。选择(x => {var p = x.Parent; p.Children = x.Children; return p;}); (我有一个S/O问题http://j.mp/10tivJy) – JoeBrockhaus 2013-05-01 21:51:25