2017-10-04 6 views
1

도움을 주셔서 감사합니다. include() 메서드 엔터티 프레임 워크 6을 사용할 때 나에게 일어난 상황에 대해 약간 혼란 스럽습니다. 이해할 수 있듯이, 포함 된 개체가 NULL이고 개체가 일치 할 때 OUTER JOIN 인 경우 포함 메서드는 LEFT JOIN으로 작동합니다.Include()가 LEFT JOIN (Entity Framework 6)으로 작동하지 않습니다.

나는 일어난 예제를 전달하여, 무슨 일이 일어 났는지 이해하도록 도와줍니다.

내 테이블에 다음과 같은 모델을 가지고 : 아래

public class Booking 
    { 
     [Key] 
     public int ID{ get; set; } 

     public string Description{ get; set; } 

     public decimal Amount{ get; set; } 

     public decimal AmoutPaid{ get; set; } 

     public DateTime? Checkin { get; set; } 

     public DateTime? Checkout { get; set; } 

     [ForeignKey("SourceBooking ")] 
     public int SourceBookingId { get; set; } 

     public SourceBooking SourceBooking { get; set; } 
    } 





public class SourceBooking 
{ 
    [Key] 
    public int ID{ get; set; } 

    public string Name{ get; set; } 

    public decimal CommissionFee{ get; set; } 
} 

DbContext입니다 :

public class BookingContext:DbContext 
{ 
    public BookingContext():base("bookingConnection") 
    { 
    } 

    public DbSet<Booking> Bookings{ get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

     modelBuilder.Entity<SourceBooking>().ToTable("sourcebookings", "public"); 

     modelBuilder.Entity<Booking>().ToTable("bookings", "public"); 

    } 
} 

다음 코드 블록의 사용에서 발생 명확하지 않다 상황 :

var db = new BookingContext(); 

var bookings = db.Bookings.Include (b => b.SourceBooking); 

나는 때문에 결과에 레코드가 오지 않았다 경향 SourceBookingNULL 인 경우이 경우 LEFT JOIN이됩니다.

누군가 나에게이 사실을 설명하고이 상황에 대한 해결책을 제시 할 수 있습니까?

감사합니다.

+0

을 Null 허용하는 FK 속성 유형을 변경하면'[외래 키 ("SourceBookingId")]'SourceBooking 속성 위 – OrcusZ

+0

좋아요를 넣어해야하지만했다 내 문제를 해결하지 못해. –

+0

어떻게 Fluent API를 사용하여 이와 동일한 관계를 만들 수 있습니까? –

답변

3

EF는 LEFT OUTER JOIN에 대한 옵션 관계와 INNER JOIN에 필요한 관계를 생성합니다. 당신이 관계가 필요입니다 EF을 말하고있다

public int SourceBookingId { get; set; } 

여기 즉 열 값을 비 널 (NULL) int 유형을 사용하여

NULL 수 없으며 SourceBooking 테이블에 항상 일치하는 레코드가 있어야합니다. 따라서 INNER JOIN을 생성합니다. 그런 경우가 아니라면

, 단순히 예약 클래스에

public int? SourceBookingId { get; set; } 
+0

는 나에게 의미가있다, 나는 시험 할 것이다 –

+0

고맙다. 개념은 나에게 명확했다. 그리고 그것은 또한 완전하게 움직였다. –