2012-05-03 3 views
1

Entity Framework 4.3.1을 사용 중이고 내 탐색 속성에 문제가 있습니다. 내 맥락에서탐색 속성 null Entity Framework 4.3.1

, 내가 설정 한 지연로드 : 또한

public MyContainer() 
     : base(ConnectionString, ContainerName) 
{ 
    this.ContextOptions.LazyLoadingEnabled = true; 
} 

, 나는 (내 모델에서 실제로 내가 그것을 생성) 가상이 재산을 만들었습니다 :

public virtual Driver Driver 
{ 
    get { return _driver; } 
    set 
    { 
     if (!ReferenceEquals(_driver, value)) 
     { 
      var previousValue = _driver; 
      _driver= value; 
      FixupDriver(previousValue); 
     } 
    } 
} 
private Driver _driver; 

이에 Ride라는 엔티티. 그러나, 내가 액세스 할 때 myContext.Ride.Driver 그것은 null입니다. 런타임 동안 Ride 엔티티를 검사 할 때 외래 키가 실제로 예상 된 드라이버의 ID로 채워지는 것을 볼 수 있기 때문에 이것은 이상합니다.

내가해야 할 일이 있습니까?

새 라이드를 생성 할 때 DriveID을 설정했지만 이후에 ID를 얻은 드라이버는 탐색 속성으로 자동 추가되지 않습니다.


좋아, 방금 해결 했으므로 대답을 공유 할 것입니다. 드라이버 엔티티를 컨텍스트에 다시 첨부해야했습니다. myContext.Driver.Attach (Driver) 그럼 난 할 수 : Ride.Driver = Driver 대신 Ride.DriverID = Driver.DriverID. 난 그냥 내 자신을 그것을 해결,

db.Driver.Attach(Driver); // Driver is a public property in my class 
myNewRide.Driver = Driver; 
db.SaveChanges(); 
+0

좋아요, 저는 방금 직접 해결 했으므로 답변을 공유 할 것입니다. Driver 엔티티를 컨텍스트에 다시 첨부해야했습니다. 'myContext.Driver.Attach (Driver)'. 그럼'Ride.DriverID = Driver.DriverID' 대신'Ride.Driver = Driver'를 할 수 있습니다. – Davio

+0

답장으로 답을 쓰십시오. 그래서 모두가 해결되었다고 봅니다. 고마워요. –

+0

:-) 거의 내가 의미했던 것. 귀하의 질문에 "대답 필드"가 보이십니까? 나는 당신의 솔루션을 거기에 놓을 것을 생각했다. 왜냐하면 당신은 이후에 "대답으로 표시"를 클릭 할 수 있기 때문이다. –

답변

0

좋아, 내가 대답을 공유 할 : 코드에서

나는이 일을하고있어 내가 다시 문맥에 드라이버 엔티티를 부착 할 필요가 있었다. myContext.Driver.Attach (Driver) 그러면 Ride.Driver 대신 Ride.Driver = Driver.DriverID = Driver.DriverID가됩니다.

관련 문제