gpt4 book ai didi

c# - Include() 不能用作 LEFT JOIN( Entity Framework 6)

转载 作者:太空宇宙 更新时间:2023-11-03 18:22:39 25 4
gpt4 key购买 nike

预先感谢您的帮助。我对使用 include() 方法 Entity Framework 6 时发生的情况感到有点困惑。据我了解,当包含的对象为 NULL 时,include 方法用作 LEFT JOIN,当对象匹配时用作 OUTER JOIN

我将通过我想到的示例,以便您帮助我理解发生了什么。

我的 table 有以下型号:

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

谁能给我解释一下,并给我一个可能的解决方案?

谢谢。

最佳答案

EF 为可选 关系生成LEFT OUTER JOIN,为必需 关系生成INNER JOIN

通过使用不可为空的int类型

public int SourceBookingId { get; set; }

您告诉 EF 关系是必需的,即列值不能为 NULL 并且 SourceBooking 中必须始终有匹配记录> 表。因此它生成 INNER JOIN

如果不是这种情况,只需将 FK 属性类型更改为可空

public int? SourceBookingId { get; set; }

关于c# - Include() 不能用作 LEFT JOIN( Entity Framework 6),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46563362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com