gpt4 book ai didi

c# - EF Core 导航属性包含使用左连接而不是内连接

转载 作者:行者123 更新时间:2023-12-03 20:26:26 26 4
gpt4 key购买 nike

在我的 API 项目中,我有

public class Team
{
[Key]
public long Id { set; get; }
[Required]
public TeamSettings TeamSettings { get; set; }
}

public class TeamSettings
{
[Key]
[Required]
[Column("TeamSettingsId")]
public long Id { set; get; }
[Required]
[ForeignKey("TeamId")]
public long TeamId { get; set; }
[Required]
public Team Team { set; get; }
}

当我使用
var team = await TeamRepo.GetAsync(t => t.Id == teamId, includes);

我可以在我的 SQL Server Profiler 上看到左联接而不是内联接。

我尝试删除注释并像这样流利:
modelBuilder.Entity<Team>()
.HasOne(t => t.TeamSettings)
.WithOne(ts => ts.Team)
.HasForeignKey<TeamSettings>(ts => ts.TeamId);

但是,我得到的只是一个左连接。

由于 TeamSettings 始终为任何团队创建并且不可为空,因此不应该使用内部联接吗?

最佳答案

关系数据库不能强制执行一对一(即需要两端)关系,因为没有标准的 FK 约束可以阻止删除相关记录(在您的情况下为 TeamSettings)。

因此 EF Core 不支持它(忽略 [Required] 上的 [Team.TeamSettings] 属性)。这在 Required and optional relationships 中有所解释。文档部分:

You can use the Fluent API to configure whether the relationship is required or optional. Ultimately this controls whether the foreign key property is required or optional.



由于 FK 始终处于依赖方,因此从技术上讲,这意味着您只能控制依赖方是否可以在没有主体的情况下存在。但是主体可以始终存在而无需依赖。

很快,关系依赖总是可选的,因此 left join .

关于c# - EF Core 导航属性包含使用左连接而不是内连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60351755/

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