2010-02-05 144 views
0

訪問外鍵值(INT)我只花了3-4個小時試圖檢索使用LINQ to實體和存儲過程的外鍵值。任何意見非常感謝。在實體框架

public JsonResult GetEvents(double? start, double? end) 
    { 
     AnoEntities _dbAno = new AnoEntities(); 

     var events = _dbAno.Events_GetByDateRange(fromDate, toDate); 

     var eventList = from e in events 
         select new 
         { 
          id = e.id, 
          title = e.title, 
          className = e.event_types.type.ToString() 
         }; 

     return Json(eventList.ToArray()); 
    } 

type_id是我試圖達到的外鍵值。我無法得到它,所以出現在實體數據模型中,我似乎無法得到它。 e.event_typese.event_typesReference都爲null所以像e.event_typesReference.EntityKey.EntityKeyValues.First()。Value.ToString()不工作。

謝謝!

回答

1

我沒有在even_types上看到任何.Include方法或Load方法,我假設你從_dbAno.Events_GetByDateRange(fromDate,toDate)返回IEnumerable。就像Craig在評論中指出的那樣,如果GetByDateRange的返回類型是IQueryable,那麼您將會投影並且EF應該爲您加載。

在實體框架1.0的隱式懶加載不支持開箱即用

只是一個提醒。您需要手動加載Load()的event_types或在ObjectQuery上使用Include方法。

+1

他突出的,所以預先加載(含),如果'events'的類型是IQueryable的''是沒有必要的。很難多說沒有看到類型和他的模型架構。但投影時不需要加載,顯式加載和延遲加載。 – 2010-02-05 02:26:37

+1

感謝克雷格,這是一個很好的觀點。我的回答假設他正在返回IEnumerable 。 – jfar 2010-02-05 02:32:17

+0

非常感謝jfar和克雷格! – 2010-02-05 07:03:43