내 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 프로파일 러에서 내부 조인이 아닌 왼쪽 조인을 볼 수 있습니다.
주석을 제거하고 다음과 같이 유창하게하려고했습니다.
modelBuilder.Entity<Team>()
.HasOne(t => t.TeamSettings)
.WithOne(ts => ts.Team)
.HasForeignKey<TeamSettings>(ts => ts.TeamId);
그러나 여전히 내가 얻는 것은 왼쪽 조인입니다.
TeamSettings는 항상 모든 팀에 대해 생성되며 Null을 허용하지 않으므로 내부 조인을 사용하지 않아야합니까?
표준 FK 제약 조건으로 종속 레코드 (귀하의 경우 TeamSettings
를 삭제할 수 없기 때문에 관계형 데이터베이스는 일대일 (즉, 양쪽 끝이 필요함) 관계를 시행 할 수 없습니다.
따라서 EF Core는이를 지원하지 않습니다 ( [Team.TeamSettings]
[Required]
속성은 무시 됨). 이것은 문서의 필수 및 선택적 관계 섹션에서 설명됩니다.
Fluent API를 사용하여 관계가 필요한지 아니면 선택적인지를 구성 할 수 있습니다. 궁극적으로 외래 키 속성이 필요한지 아니면 선택적 인지를 제어합니다 .
FK는 항상 종속적 인 측면에 있기 때문에 기술적으로는 종속 관계가 주체없이 존재할 수 있는지 여부 만 제어 할 수 있습니다. 그러나 주체는 항상 의존하지 않고 존재할 수 있습니다.
곧 관계 종속 항목은 항상 선택 사항이므로 left join
입니다.