【问题标题】:Selecting Related Entities When No Association Exists不存在关联时选择相关实体
【发布时间】:2011-04-12 00:15:12
【问题描述】:

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

MasterTable 有一个 child1Id 和 child2Id 列。

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

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

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

我无法改造关系或关联。

理查德

【问题讨论】:

    标签: entity-framework-4 linq-to-entities


    【解决方案1】:

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

    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 designer 中创建关系。在这种情况下,您将能够使用导航属性。

    【讨论】:

    • 我也有类似的情况.. Parent & Child 在 EF/DB 中没有明确的关联。所以我在 Parent.partial.cs 类文件中添加了一个 Child 属性。有没有办法使用查询选择器 - 但是'选择 m' 以便 EF 物化主对象 - 然后以某种方式填充所有内联的 .Child 属性,以便 EF 实际上会生成一个返回子节点并同时实现它们的连接? (本质上是动态关联)
    • .. 目前我必须做一些类似 select new { Parent = parents, Children = children } .. 但这意味着我必须花费更多的周期将其填充到 Parent: var results = q.Select (x => { var p = x.Parent; p.Children = x.Children; return p; }); (我在 S/O 问题中有这个 j.mp/10tivJy
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多