Include()不能用作LEFT JOIN(实体框架6)
提前感谢您的帮助。 我对使用include()
方法实体框架6时发生的情况有些困惑。 据我所知,包含对象为NULL
时的包含方法为LEFT JOIN
,当对象匹配时为OUTER JOIN
。Include()不能用作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);
我倾向于因为在结果记录没有来其SourceBooking
是NULL
,在这种情况下将制作LEFT JOIN
。
有人可以向我解释这一点,并给我一个可能的解决方案,这种情况?
谢谢。
EF产生LEFT OUTER JOIN
为可选关系和INNER JOIN
为所需关系。
通过在此处使用非可空int
型
public int SourceBookingId { get; set; }
你告诉EF,我们的关系需要,即列值不能NULL
而且必须始终匹配的记录中SourceBooking
表。因此它会生成INNER JOIN
。
如果不是这种情况,只需更改FK属性类型可空
public int? SourceBookingId { get; set; }
对我有意义,我会测试 –
谢谢。这个概念对我来说很清楚,而且它也很完美。 –
在预订类,你应该把'[ForeignKey的(“SourceBookingId”)上面的'SourceBooking财产 – OrcusZ
好了,但它确实没有解决我的问题。 –
我怎样才能使用Fluent API建立同样的关系? –