1
나는 EF 코드 처음에 다음과 같은 모델이 다음과 같이 내가 관계를 정의엔티티 프레임 워크는 두 번째 왼쪽 일대일 (선택/필수) 관계에 참여 생성
public class A
{
public int Id { get; set; }
public virtual B { get; set; }
}
public class B
{
public int Id { get; set; }
public virtual A { get; set; }
}
을 :
나는 다음과 같은 쿼리를 작성하는 경우modelBuilder.Entity<A>().HasKey(entity => entity.Id);
modelBuilder.Entity<B>().HasKey(entity => entity.Id);
modelBuilder.Entity<A>()
.HasOptional(entity => entity.B)
.WithRequired(entity => entity.A);
:
는var a = db.AItems.Include("B");
다음 생성되는 쿼리가 될 때 :
SELECT
[Extent1].[Id] AS [Id],
[Extent3].[Id] AS [Id1]
FROM [dbo].[As] AS [Extent1]
LEFT OUTER JOIN [dbo].[Bs] AS [Extent2] ON [Extent1].[Id] = [Extent2].[Id]
LEFT OUTER JOIN [dbo].[Bs] AS [Extent3] ON [Extent2].[Id] = [Extent3].[Id]
왜이 유형의 관계에 Entity Framework에는 추가 (쓸모없는) 왼쪽 결합이 있습니까?
이는 의미가 있습니다. 내가 포함하지 않고 왼쪽 조인을하고 있는지 궁금해 그래서 어떤 B 개체가 해당 A 레코드를 가져야하는지 확인 할 수 있는지 확인하십시오. 그 이유는 제약 조건 오류가 있기 때문입니다. – Dismissile
나는 당신이 옳았다 고 생각합니다. 적어도 네비게이션 프로퍼티를 명시 적으로 포함하는 경우에는 두 번째 조인 문이 발생하지 않습니다. EF는 특히 상속과 관련된 주요 단점이 있으며 EF를 사용하려는 경우 상속 관련 문제를 읽으십시오. – daryal
또한 대부분의 경우 단점보다 중요한 장점이 있습니다. – Dismissile