2009-02-02 2 views
3

내 Linq to SQL dbml에 Task 엔터티가 있습니다. ID 및 ParentID 열과 자체 참조합니다. 두 ID를 연결하는 협회가 있습니다.LINQ to SQL : 자체 참조 엔터티 - ParentID/ChildID 연결

모든 것이 인텔리 센스에서 잘 작동하는 것처럼 보입니다. Task.Parent.ID와 심지어 Task.Parent.Parent.ID, 등등을 타이핑 할 수있게 해줄 것입니다. 그러나 그것은 저에게 객체의 인스턴스로 설정되지 않은 객체 참조를 제공합니다. " 오류.

다른 모든 연관 체는 내 다른 엔티티와 잘 작동합니다. 자체 참조 엔티티 오류 만.

작동하도록하려면 특별한 것이 있습니까? 아니면 두 번째 작업 엔터티를 추가하고 ParentTask를 호출하여 연결을 설정하는 것이 좋습니다.

답변

4

실제로 상위 항목이없는 엔티티에 대한 상위 항목을 가져 오려고하면 오류가 발생합니다. 당신이 지정한 모든 것이 완벽하게 괜찮습니다. 그리고 나는 비슷한 관계를 여러 번 구현했습니다.

예외를 언급했지만 발생 시점은 언급하지 않았습니다. 업데이트하는 동안? 아마도 FK 위반이있을 수 있습니까? INsert 동안? 아니면 그냥 쿼리?

Task.Parent.Parent.Parent.Parent는 무한히 할 수있는 것이 아닙니다. 물론 컴파일 될 것이고, 코드는 그 진술을 뒷받침하는 데이터가 있다는 것을 모릅니다. 그러나 런타임시 각 .Parent 호출은 동등한 ParentID 열과 일치해야합니다.

+0

그냥 쿼리. 그래서 부모 개체가 먼저 존재하는지 확인한 다음 확인한 후 표시해야한다는 내용을 사용자 의견에서 취합니다. – EdenMachine

+0

네 - 네가 옳았다. 일단 null에 대한 테스트가 존재하는 것들에 잘 작동합니다. 걱정하지 마라. 나는 그 것을 놓친 것에 대해 자신을 걷어 찼다. – EdenMachine

+0

간단한 실수는 :) – DarkwingDuck

0

LINQ to SQL에서 올바르게 모델링 된 단일 테이블 관계에 아무런 문제가 없었습니다. 당신이 묘사하고있는 것을 재현하기위한 빠른 테스트 케이스를 실행했는데 성공했습니다 (Item.Parent.ID, Item.Parent.Parent.Parent.Parent.ID 등)

SQL 프로파일 러를 설정하고 어떤 SQL LINQ 공급자가 생성하려고합니다. 또한 designer.cs 파일의 엔티티 클래스를 살펴보고 Task의 Parent 속성에 대한 getter가 이상하게 보는지 확인합니다.