我正在使用實體框架5.導航屬性未在實體更新後加載
否未放置上下文。
我有一些代碼看起來是這樣的......
IList<CarPassenger> myCarPassengers = carPassengerRepository.Where(cp => cp.CarID == carID);
RecordPassengersLastDrive(myCarPassengers);
// LINQ to Objects query
var backSeatPassengers = myCarPassengers.Where(cp =>
!cp.IsDriver &&
cp.Passenger.Status == "awake");
// Throwing NullReferenceException exception here
var passengerIDs = new List<int>(backSeatPassengers.Select(cp => cp.PassengerID);
...
private void RecordPassengersLastDrive(IList<CarPassenger> carPassengers)
{
foreach(CarPassenger passenger in carPassengers)
{
passenger.DrivingStatus = "driving";
passenger.LastDrive = DateTIme.Now;
}
}
我可以探查,它是爲乘客測試狀態進行查詢看在LINQ查詢中的Passenger中,當我在SQL Management Studio中執行該查詢時,查詢返回Passenger數據。真奇怪的是,如果我在RecordPassengersLastDrive前放置一個斷點並檢查carPassengers,Passenger屬性不爲null。如果我檢查了更新後的轎廂,如果有兩名乘客將會裝載,另一名則不會。
我知道代碼不理想,它應該在LINQ to SQL查詢中預加載Passenger,並且是的,我也知道我們應該使用Entity Framework 6.0,當我們啓動時它不可用。然而,當然,延遲加載應該一直工作?
有沒有人遇到過這樣的事情?或者可以提供另一種解釋?
carPassengerRepository.Where returns IList <>。我更新了代碼以使其更清晰。 但是,包括工作。加載集合時沒有使用include是一個錯誤。我更關心代碼的穩健性,以及我們相信懶惰加載工作的類似地方,事實並非如此。 – Mick 2014-11-21 06:06:04
懶惰的加載工程對IList集合的實體... http://stackoverflow.com/questions/22250246/entity-framework-lazy-loading-working-even-with-tolist – Mick 2014-11-21 06:10:02
並謝謝是的。我更新了==標誌。我沒有從比這更復雜的代碼複製代碼,而不是關於汽車;)。 – Mick 2014-11-21 06:12:13