0

단지 응용 프로그램을 EF6으로 업그레이드합니다.EF4와 EF6의 차이

내 기본 개체 여행에 예약이 포함되어 있습니다. AddObject 및 Add 함수에 전달할 내 예약 객체는 Trip_Id 필드 만 가지고 Trip 객체에 Trip 탐색 속성을 설정하지 않았습니다. 즉, DB.SaveChanges를 호출 한 후 EF4에서 예약 객체에는 탐색 할 수있는 "Trip"속성이 있습니다. 그러나 EF6에서는 이것이 일어나지 않습니다. 어떤 아이디어?

EF 6 코드

db.Reservations.Add(reservation); 
db.SaveChanges(); 
return RedirectToAction("Details", "Trip", new { id = reservation.Trip.Id }); 

EF4 코드

db.Reservations.AddObject(reservation); 
db.SaveChanges(); 
return RedirectToAction("Details", "Trip", new { id = reservation.Trip.Id }); 

이 EF6은 AddObject이없고 내가 추가 기능을 사용할 필요가 보인다.

+0

에 대해 LINQ 쿼리를 실행 DbChangeTracker.Entries 어떤 이유로 장애인입니다. 네비게이션 속성이 가상이 아니거나 클래스가 봉인되어 있습니다. EF4 앱에서 느린 로딩을 사용 했습니까? – Pawel

답변

0

reservation 개체를 만들었거나 데이터베이스에서로드 했습니까?

방금 ​​만든 경우 EF에서 생성하는 프록시가 아닌 실제 개체에 대한 참조가 있습니다. 이 경우

, 나는이 적용될 수 생각 (오른쪽 끝에서, 그것은 DbSet.Add() 자동 DetectChanges()를 호출 할 필요가 있다고하더라도, 당신의 db.Reservations 속성은 ... 음 ... 가능성 DbSet 유형입니다).

어떤 이유로 든 변경 내용 추적을 사용하지 않도록 설정했을 수 있습니다. 이는 성능상의 이유로 수행 될 수 있습니다.

http://msdn.microsoft.com/en-us/data/jj713564.aspx

FKS 및 탐색 속성의 변경을 동기화하지

는 전술 한 방법 중 하나를 사용하여 컨텍스트에 부착 된 오브젝트의 관계를 변경하려면 엔터티 프레임 워크에서 외래 키, 참조 및 컬렉션을 동기화해야합니다 ( ). Entity Framework는 프록시를 사용하는 POCO 엔터티에 대해이 동기화 (관계 수정이라고도 함)을 자동으로 관리합니다. 자세한 내용은 프록시 사용을 참조하십시오.

프록시없이 POCO 엔터티를 사용하는 경우 문맥에서 관련 개체를 동기화하도록 DetectChanges 메서드가 호출되도록 을 지정해야합니다. 다음 API는 자동으로 DetectChanges 호출을 트리거합니다.

DbSet.Add DbSet.Find DbSet.Remove DbSet.Local DbContext.SaveChanges DbSet.Attach DbContext.GetValidationErrors DbContext.Entry 게으른 로딩 때문에 아마 DbSet

+0

예약 개체는'Reservation reservation = new Reservation(); '을 사용하여 데이터베이스에서로드되지 않은 상태로 생성되었습니다. 그럼 내가 예약 해.trip_id = 99' (99는 트립 객체의 ID 임); 이 예약 객체는 원래 질문에 게시 된 코드로 전달되고 EF4 및 EF6에서 설명한대로 동작합니다. – user1287453