2012-03-04 56 views
1

我有一個數據層類(LINQ2SQL,沒有實體框架)從數據庫如下返回行關係的擴展:LINQ-2-SQL上ToList()

public ReadOnlyCollection<UserCars> Cars 
    { 
     get 
     { 
      using (var context = new TransportopiaDataContext()) 
      { 
       var result = (from car in context.UserCars 
           where car.UserId == UserId 
           select car); 
       return result.ToList().AsReadOnly(); 
      } 
     } 
    } 

現在,如你所知,你必須執行ToList(),因爲當您離開using()子句時,datacontext超出範圍。問題是有外鍵關係;雖然上下文仍在範圍內,但您可以這樣做:

string foo = car.Manufacturer.Name; 

但是,在處理上下文後這樣做會導致錯誤。所以我的問題是:

「有沒有辦法做ToList(),這樣外鍵關係也會被擴展?」

回答

3

您可以執行查詢之前在DataLoadOptions指定此:

using (var context = new TransportopiaDataContext()) 
{ 
    DataLoadOptions options = new DataLoadOptions(); 
    options.LoadWith<UserCar>(x => x.Manufacturer); 
    context.LoadOptions = options; 
    var result = (from car in context.UserCars 
        where car.UserId == UserId 
        select car); 
    return result.ToList().AsReadOnly(); 
} 
+0

完美,謝謝。有用。 我的第一個猜測,這是不夠的,是設置context.DeferredLoadingEnabled = false。這是否會導致數據在「var result =」子句中正確加載,但仍然沒有關係? – Dave 2012-03-04 19:12:14

+0

@Dave:是的,將'DeferredLoadingEnabled'設置爲false只會禁用您最初返回的'UserCar'實例的後續查詢 - 因此它將停止發生上下文處置錯誤,但仍不會加載任何相關數據/表。 – BrokenGlass 2012-03-04 19:19:17