2017-10-04 75 views
1

提前感謝您的幫助。 我對使用include()方法實體框架6時發生的情況有些困惑。 據我所知,包含對象爲NULL時的包含方法爲LEFT JOIN,當對象匹配時爲OUTER JOINInclude()不能用作LEFT JOIN(實體框架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

在預訂類,你應該把'[ForeignKey的(「SourceBookingId」)上面的'SourceBooking財產 – OrcusZ

+0

好了,但它確實沒有解決我的問題。 –

+0

我怎樣才能使用Fluent API建立同樣的關係? –

回答

3

EF產生LEFT OUTER JOIN可選關係和INNER JOIN爲所需關係。

通過在此處使用非可空int

public int SourceBookingId { get; set; } 

你告訴EF,我們的關係需要,即列值不能NULL而且必須始終匹配的記錄中SourceBooking表。因此它會生成INNER JOIN

如果不是這種情況,只需更改FK屬性類型可空

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

對我有意義,我會測試 –

+0

謝謝。這個概念對我來說很清楚,而且它也很完美。 –