0
我有一個Customer表和另一個Orders表。每個客戶可以有很多訂單(一對多關係)。實體框架 - 獲得計數的最佳做法
我想獲得一個Customer對象,並從中獲取他有多少個訂單(實際訂單數據在這一點上不相關)。所以當我看到它時,我有兩種選擇:
- 使用另一個OrdersCount字段創建一個視圖 - 這將是我係統中的另一個對象。
- 在我的應用程序,當我需要計數得到Customer.Orders.Count - 但我的理解,這將導致一個額外的查詢來運行並將所有的訂單從數據庫拉到該集合。
有沒有正確的方法來做這樣的事情?
謝謝
「爲我的理解,這將導致一個額外的查詢運行並將所有訂單從數據庫中提取到該集合。」這將是EF做的一件相當愚蠢的事情,不是嗎?試一試:你應該看到一個查詢,它從數據庫中提取計數,而沒有「實現」訂單集合。 – dasblinkenlight
@dasblinkenlight你確定嗎?當然,'context.Orders.Count()'的行爲就像你描述的那樣,但是'context.Customers.Single()。Order'可能有類型'ICollection'(或者那個接口的具體實現)如果你沒有'IQueryable'實例,你可以調用'Queryable.Count'? –
hvd
'Customers.Select(x => {Count = x.Orders.Count,Name = x.CustomerName})'將會完成_zero_查詢。在它上面調用'.ToList'或者枚舉它只會產生一個數據庫查詢。只要你在EntityFramework中的IQueryable上下文中運行代碼,它只會在枚舉其結果時運行一個查詢(但這並不意味着它會很快)。注意'ToList'太早,最後出現「選擇N + 1」問題。 –