什么是使用EF连接两个没有数据库关系的表的最佳方法?

时间:2012-11-21 13:45:41

标签: entity-framework

好吧,假设您有两个表:Order和OrderLine,由于某种原因,它们在数据库中没有外键关系(这是一个例子,与它一起使用)。现在,您想要使用Entity Framework加入这两个表,并且您可以做这样的事情:

        using (var model = new Model())
        {
            var orders =  from order in model.Order
                          join orderline in model.OrderLine on order.Id equals orderline.OrderId into orderlines
                          from ol in orderlines.DefaultIfEmpty()
                          select new {order = order, orderlines = orderlines};

        }

现在,上面会产生订单和订单,左连接和所有,但它有很多问题:

  1. 这很丑陋
  2. 返回匿名类型
  3. 它返回同一订单的多个实例,我必须在客户端执行Distinct(),因为orders.Distinct()失败。
  4. 我正在寻找的解决方案是:

    1. 漂亮
    2. 返回一个静态知名类型而不是匿名类型(我试图投影查询结果,但是我遇到了OrderLines的问题)
    3. 在服务器端运行区别
    4. 任何吗

1 个答案:

答案 0 :(得分:3)

即使数据库表没有设置外键关系,也可以像配置实体框架一样配置它。

将OrderDetails导航属性添加到Order类,然后只查询Orders。