2011-03-22 4 views
0

3 개의 테이블 (Categories, Articles 및 ArticleCategories)이 있습니다. ArticleCategories이 결합 된 PK와의 concists 있습니다C# subsonic 2.2 : 다 대다 관계 및 페이지 매김 문제

  1. 은 articleID를 (PK, FK, int)를
  2. 카테고리 ID (PK, FK, int)를 내가 아음속 페이징을 사용하고 지금

방법 나는 아주 이상한 행동을하고있다. 그것은 두 배의 레코드 양을 반환합니다 (2 PK 's?). 문제는 페이징을 완전히 제거하거나 ArticleCategoryID라는 PK 필드를 추가하여 해결됩니다.

 SubSonic.Query qry = new SubSonic.Query(DAL.ArticleCategory.Schema); 
     qry.AddWhere(DAL.ArticleCategory.Columns.CategoryID, filterid); 

     //Pagesize 
     qry.PageSize = Classes.Settings.PageSizes.GetAdminPageSize(); 

     //Pageindex 
     if (pageindex > 0) 
      qry.PageIndex = pageindex; 
     else 
      qry.PageIndex = 1; 

위의 코드는 다른 모든 테이블에 적용되지만 다 대다 관계에서는 실패합니다. 나는 여분의 (그리고 싱글) PK 필드를 추가하는 것에 의지 할 수 있지만 그것이 옳다고 생각하지는 않는다.

어쩌면 내가

이 당신의 시간 동안 당신은 또한에 롭 Conery의 대답을 읽을 수 있습니다

답변

0

종류와 관련, 마크를 주셔서 감사합니다 :) 미리 사과한다, 그래서 여기에 분명 뭔가를 누락 this 질문 - 그것은 SubSonic 3에 관한 것이지만, Rob은 다 대다 테이블이 어떤 테이블의 행을 고유하게 식별하는 단일 열 기본 키를 가져야한다고 생각하기 때문에 SubSonic에서 복합 키 지원을 구현했다고 생각하지 않습니다. 2.

개인적으로 항상 광고 d 많은 CRUD 코드를 단순화하기 때문에 PK 대 -> -> 많은 테이블 나에게 맞는 느낌 - 그렇게 할 수 있다면 그렇게 할 것을 권한다.

공식 문서를 찾을 수 없지만 뷰의 첫 번째 열에 항상 PK 열을 사용해야한다는 것도 기억하고 있습니다 (문제가 발생했습니다 ...). 그렇지 않으면 페이징이 제대로 작동하지 않습니다.

페이징 문제는 데이터베이스 버전에 따라 달라질 수 있습니다. 예를 들어 SQL Server 2000의 페이징 구현은 SQL Server에서 적절한 지침이 없기 때문에 해킹 (테이블 변수 등)입니다. 나중에 DB 버전은 페이징을 구현하는 더 나은 방법을 제공하며 단일 열 PK에 의존하지 않을 수 있습니다.

마지막으로,이 질문에 대해, 그리고 다시 개인적인 취향에 대해 : SubSonic.Query을 피하고 대신 SubSonic.SQLQuery을 사용하려고합니다. 나중에 SqlQuery가 추가되어 쿼리보다 좋습니다 (this question 참조)

+0

Marapet에게 도움을 주신 데 대해 다시 한번 감사 드리며, 이제 막 Subsonic과 계속해서 다시는 돌아 보지 못했던 것 같습니다. 테이블에 PK 컬럼을 추가하여 문제를 해결할 것입니다. SQLQuery에 대한 제안을 보내 주셔서 감사합니다. 나는 이것을 체크하고 아마도 다른 주제에 대해서도 좀 더 읽을 것입니다. 다시 한번 감사드립니다 m8! – Mark

+0

오신 것을 환영합니다. 기꺼이 도와 드리겠습니다. – marapet