可以使用存储过程返回链接对象

本文关键字:链接 对象 返回 存储过程 可以使 | 更新日期: 2023-09-27 17:59:02

我有两个表,客户和订单。一个客户可以有多个订单。这两张表之间有一个链接。

目前使用Linq到SQL来获取数据并显示。数据库已经增长,结果显示非常缓慢。

经过一番阅读,我添加了一个存储过程(将SP添加到dbml文件中,该文件返回ISingleResult,因此创建了一个新方法,我在其中迭代SP数据并将其添加到我的客户对象列表中)。我这样做是为了加快获取和显示数据的速度。到目前为止,这一切都很顺利。

问题是,当我过去从客户那里获得订单详细信息时,我曾经写过这个

foreach (Customer c in Customer)
{
 foreach (Order o in c.Orders)
  {
    // other logic here
  }
}

使用存储过程方法c.订单为空,因此我将相关关系添加到SP,但订单始终为空-唯一改变的是返回的行数,与客户下的订单数相同,但我不能像添加SP之前那样迭代订单?

有没有想过我哪里出了问题或者该怎么办?

我的存储过程:

Select Customers.*, Orders.ID 
FROM            
Customers INNER JOIN Orders ON Customers.Ordersid = Orders.Ordersid

在代码中,我有

public List<Customer> GetCustomers
{
    ISingleResult<StoredProcedureName> AllCustomers = myDC.StoreProcedureName;
    List<Customer> Customers = new List<Customer>();
    foreach (var c in AllCustomers)
    {
       //Add each property from SP into List properties and return List
    }
//....
}

可以使用存储过程返回链接对象

我想您需要在查询中使用Include子句来强制dbcontext为每个Customer加载导航属性"Orders"。见此帖:

如何构造LINQ to Entities查询以直接加载子对象,而不是调用Reference属性或load()

您实际上并没有选择Orders对象,您只是获取ID。

尝试将存储过程简化为:

Select * -- take everything
FROM            
Customers INNER JOIN Orders ON Customers.Ordersid = Orders.Ordersid