2017-10-04 8 views
1

ありがとうございました。 include()メソッドエンティティフレームワーク6を使用すると、私に起こった状況についてちょっと混乱します。 私が理解しているように、インクルードメソッドは、囲まれたオブジェクトがNULLの場合はLEFT JOIN、オブジェクトが一致する場合はOUTER 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

をNULLABLEするFKプロパティの種類を変更するには、 '[のForeignKey(「SourceBookingId」)]' SourceBookingプロパティ上記 – OrcusZ

+0

オーケーを置く必要がありますが、それはやりました私の問題を解決しない。 –

+0

Fluent APIを使用してこの同じ関係を作るにはどうすればよいですか? –

答えて

3

EFはLEFT OUTER JOINための任意関係とINNER JOINに必要関係を生成します。非NULL可能intタイプを使用することにより

ここ

public int SourceBookingId { get; set; } 

あなたは関係がすなわち、列の値がNULLすることはできず、常にSourceBookingテーブル内の一致するレコードが存在する必要があり、を必要としていることをEFを語っています。したがって、INNER JOINを生成します。それはそうではないかどう

、単にあなたの予約クラスに

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

私には意味がある、私はテストします –

+0

ありがとう。そのコンセプトは私には明らかでしたが、それは完全に機能しました。 –

関連する問題