2009-04-12 7 views

답변

1

예 당신은 할 수 있지만, 원래 관계되는 linq2sql 생성 된 속성으로 즉

[Association(Name="Test_TestData", Storage="_TestDatas", ThisKey="SomeId", OtherKey="OtherId")] 
    public System.Data.Linq.EntitySet<TestData> MyTestDatas 
    { 
     get 
     { 
      return this.TestDatas; 
     } 
    } 

TestDatas을 동일한 속성을 적용해야합니다.

업데이트 : 샘플 쿼리는 내가 실행 :

 var context = new DataClasses1DataContext(); 
     var tests = 
      from d in context.Tests 
      where d.MyTestDatas.Any(md=>md.MyId == 2) 
      select new 
      { 
       SomeId = d.SomeId, 
       SomeData = d.SomeData, 
       Tests = d.MyTestDatas 
      }; 
     foreach (var test in tests) 
     { 
      var data = test.Tests.ToList(); 
     } 
+0

간접 속성이 표현 변환에 지원되지 않으므로 부모/자식 관계가 쿼리에 사용되는 경우 동일한 방식으로 작동하지 않습니다. – tvanfosson

+0

방금 ​​두 개의 샘플 쿼리를 실행했습니다. – eglasius

+0

@Freddy -로드 된 속성을 참조 할 수 있지만 선택 항목이 작동하지 않을 것이라고 생각합니다. 속성 장식이 없으면 표현을 생성하는 데 필요한 힌트가 없다고 생각합니다. – tvanfosson

2

연결 속성에 다른 이름을 지정하려면 연결에 대해 속성 페이지를 사용하고 부모 및/또는 자식 속성의 이름을 바꾸면됩니다. 그러면 클래스의 EntityRef/EntitySet 이름이 변경됩니다.

EDIT : 부분 클래스에서 별도의 속성을 사용하면 단점은 LINQ가 쿼리를 생성 할 때 LINQ를 사용할 수 없다는 것입니다. 기본적으로 항상 사용하기 전에 엔티티를 가져야합니다. 객체의 관련 속성 이름을 바꾸면 LINQ가 쿼리를 구성하는 데 관련된 속성을 사용하여보다 효율적인 쿼리를 생성 할 수 있습니다. 예를 들어 관련 엔티티가 특정 속성 값을 갖는 엔티티를 가져 오려면 속성 데코레이션 엔티티를 사용하면 LINQ가 SQL을 생성하여 데이터베이스에서 일치하는 값만 가져올 수 있습니다. 순수한 속성 구현 (단순히 기본 관계 속성을 참조하고 실제로 이름을 바꾸는)을 사용하면 먼저 모든 엔터티를 가져와 응용 프로그램에서 필터링을 수행해야합니다.

+0

이 실용적인 접근 방식이 아니다. 변경 사항은 모델을 다시 생성 할 때 재정의됩니다. ( –

+0

+1 실제 방법입니다 .Linq2sql에는 재생성 모델 버튼이 없으므로 디자이너의 변경 작업도 함께 진행됩니다. 귀하의 질문에 대한 정보 – eglasius

+0

재생성으로, 테이블을 제거하고 다시 추가하는 것을 의미합니까? 예, 문제가 있습니다. 그러나 확실히 그렇게 자주 일어나지 않습니다. 아니면 외부 매핑 파일을 사용하고 있습니까? – tvanfosson