모든 멋진 답변을 게시 해 주셔서 다시 한번 감사드립니다.SQL에서 부모 및 자식 데이터를 읽는 방법?
SQL에 두 개의 테이블이 있습니다. 첫 번째는 부모를 정의하고 ParentId라는 기본 키 열을가집니다. 또한 기본 키가있는 자식 테이블과 'ParentId'와 같은 외래 키가 있습니다. 그래서 두 테이블은 하나의 부모 - 많은 어린이 관계를 형성합니다.
질문은 부모 + 자식 데이터 C# 코드를 가져 오는 가장 효율적인 방법은 무엇입니까? 데이터는 다음과 같은 개체에 읽을 수있다 : 나는 다음과 같은 쿼리를 사용하는 경우 각각의 부모가 여러 번 그것을 가지고 많은 아이들이 반복 될 위치를
public class Parent
{
public int ParentId { get; set; }
public List<Child> Children { get; set; }
// ... many more properties ... //
}
public class Child
{
public int ChildId { get; set; }
public string Description { get; set; }
// ... many more properties ... //
}
내가 한 번 부모와 아이들을 얻을 것이다 :
SELECT
p.ParentId as 'ParentId',
c.ChildId as 'ChildId',
-- other relevant fields --
FROM
Parents p
INNER JOIN
Children c
ON
p.ParentId = c.ParentId
이 방법을 사용하면 모든 고유 한 행을 찾아 모든 하위 항목을 읽어야합니다. 이점은 내가 DB에 1 번만 여행한다는 것이다.
SELECT * FROM Parents
을 한 후 별도로 모든 어린이를 읽어 :
SELECT * FROM Children
을하고 아이들과 모든 학부모 병합 LINQ를 사용
이의 두 번째 버전은 별도로 모든 부모를 읽는 것입니다. 이 방법은 db에 2 번 트립합니다.
세 번째이자 마지막 (또한 가장 비효율적 인) 방법은 모든 부모를 붙잡고 각 부모 개체를 구성하는 동안 모든 자식을 잡기 위해 DB로 이동하는 것입니다. 이 접근법은 n + 1 연결을 취합니다 : 모든 부모에 대해 1, 각 부모에 대해 모든 하위 항목을 가져 오는 n 개의 경로가 필요합니다.
이 작업을 쉽게 수행하는 방법에 대한 조언이 있으십니까? 내가 스토어드 프로 시저를 사용하지 못하게하고, LINQ2SQL 또는 EF를 사용할 수 없다고 허락했습니다. 데이터 테이블 대 DataReader를 선호합니까? 그렇다면 접근 방식 1 또는 2 중 하나를 사용하는 방법은 무엇입니까?
덕분에, 마틴
에 트리를 구축 선호 나는 분명히 내가 질문을 먼저 요청 된 이유는 아이들이 필요합니다. – bleepzter