[英]How to select all related data from two tables having one-to-many relationship using Entity Framework?
[英]How to return Data from multiple tables in DAL layer with one-to-many relationship using ADO.NET
我有一個客戶表和訂單表,數據庫中有一對多的關系,我的要求是獲得每個客戶的相應訂單列表。 在此輸入圖像描述
以下是customerid = 1的訂單列表
我可以通過數據庫的多次循環調用來做到這一點(例如 - 首先我收集了客戶列表,然后為每個客戶收集了他們在相應listDTO中的訂單列表,最后將帶有oders DTO的客戶列表返回到BAL層。
我認為多次調用數據庫來獲取數據並不好。 有沒有有效的方法。
雖然您可以進行加入,但就像您所說的那樣,您將獲得每個訂單重復客戶信息的多條記錄,您必須對其進行重復刪除。
我喜歡使用SqlDataReader對多個結果集的支持來使這更容易。 https://msdn.microsoft.com/en-us/library/hh223698(v=vs.110).aspx
所以你的SQL看起來像這樣:
--Assume that @CustomerId is a parameter (always use parameters!)
SELECT CustomerId, CustomerName
FROM Customer
WHERE CustomerId = @CustomerId
SELECT OrderId, OrderDate --all your order columns
FROM Orders
WHERE CustomerId = @CustomerId
然后在您的ADO.Net代碼中:
using (var reader = command.ExecuteDataReader())
{
while (reader.Read())
{
//read first result set
}
reader.NextResult();
while (reader.Read())
{
//read secondresult set
}
}
甚至更好,使用ExecuteDataReader的異步版本,Read,NextResult :-)
如果您正在使用SQL 2016,那么可以使用JSON路徑查詢很好地完成此操作,以返回JSON的層次結構,然后可以將其反序列化到您的對象中,或者可能傳遞給客戶端。
SELECT
O.ORDER_ID orderId,
O.ORDER_NAME orderName,
O.ACTIVE_START orderDate,
(SELECT
OI.ORDER_ITEM_ID itemId,
OI.NAME name,
OI.COMMENTS comments
FROM
dbo.ORDER_ITEM OI
WHERE
O.ORDER_ID = OI.ORDER_ID
FOR JSON PATH) items
FROM
dbo.[ORDER] O
WHERE
O.PERSON_ID = @PERSON_ID
FOR JSON PATH;
這將返回類似的東西
[
{
"orderId": 21,
"orderName": "my first order",
"orderDate": "2016-09-18T11:01:41",
"items": [
{
"itemId": 41,
"name": "pizza",
"comments": "Extra Cheese Please"
},
{
"itemId": 42,
"name": "italian sandwich",
"comments": "No peppers"
}
]
}
]...
有一個git項目,包含ado的包裝,用於在https://github.com/ahhsoftware/EzAdoVSSolution上進行這類調用,這可能是你感興趣的東西。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.