可以使用存储过程返回链接对象
本文关键字:链接 对象 返回 存储过程 可以使 | 更新日期: 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