2010-01-28 23 views
2

我想讓我的查詢更好,但一直未能夠找到的資源在那裏它規定了當一個查詢被運到D b。在什麼時候LINQ到SQL或LINQ將請求發送到數據庫

DBContext db = new DBContext(); 
Order _order = (from o in db 
       where o.OrderID == "qwerty-asdf-xcvb" 
       select o).FirstOrDefault(); 
String _custName = _order.Customer.Name +" "+_order.Customer.Surname; 

_custName的賦值是否需要向數據庫發出任何請求?

+0

任何資源鏈接也將不勝感激。 – Kieran 2010-01-28 23:48:55

回答

7

_custName的任務是否需要向數據庫發出任何請求?

這取決於Order.Customer是否被延遲加載。如果它是懶惰加載,那麼是的。否則,不。

db.Log = Console.Out; 

然後你可以看控制檯上的SQL語句:

順便說一句,你可以,如果你設置DataContext.Log屬性容易展開調查。通過瀏覽你的程序,你可以準確地看到SQL語句到達數據庫的時間。

退房MSDN上Deferred versus Immediate Loading。特別是,您可以turn off lazy loading。小心SELECT N + 1 problem

1

僅供參考,除了延遲加載,還有另外一個原因,當你想到它使用LINQ時,爲什麼可能不會出現數據庫活動。例如,如果我稍微改變你的示例代碼:

DBContext db = new DBContext(); 
var orders = (from o in db 
      where o.OrderID == "qwerty-asdf-xcvb" 
      select o); 
var order = orders.FirstOrDefault(); 
String _custName = _order.Customer.Name +" "+_order.Customer.Surname; 

不熟悉的人LINQ是如何工作的可能期望所有訂單從數據庫中執行的第二行代碼時檢索。事實上,LINQ會延遲查詢數據庫,直到最後一刻,在這種情況下是調用FirstOrDefault。當然,在這一點上,LINQ知道只能檢索至多一條記錄。