2011-03-22 73 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的?)。該問題通過完全刪除分頁或添加名爲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領域,但這並不合適。

也許我失去了一些東西很明顯這裏,所以我提前對此表示道歉:)

謝謝您的時間 親切的問候, 馬克

回答

0

您也可以讀取羅布科納的答案this問題 - 它是關於SubSonic 3的,但是因爲它表示Rob認爲多對多表應該有一個單列主鍵來唯一標識任何表中的一行,所以我不認爲他在SubSonic中實現了複合關鍵字支持2.

我個人總是打廣告d將PK列轉換爲多對多表格,因爲它簡化了很多CRUD代碼。感覺我是對的 - 如果你能這樣做,我建議去做。

我找不到官方文檔,但我也記得(並且遇到問題......)應該總是使用PK列作爲視圖中的第一列,否則分頁無法正常工作。

分頁問題也可能取決於數據庫版本。由於SQL Server中缺少適當的指令,因此使用SQL Server 2000進行分頁實施就是一種黑客(表變量等)。後來的數據庫版本提供了更好的方法來實現分頁,並且可能不依賴於單個列PK。

最後,並不是真的關於這個問題,再次是個人喜好:我儘量避免SubSonic.Query並使用SubSonic.SQLQuery來代替。 SqlQuery後來被添加並且比查詢更好(另請參閱this question

+0

感謝Marapet再次爲您提供幫助,似乎我只是繼續使用Subsonic,並且從未真正回頭過。我會在我的表格中添加一個PK列來解決問題。感謝您對SQLQuery的建議,我也會檢查一下,並且可能還會對其他主題做更多的閱讀。再次感謝m8! – Mark 2011-03-26 14:36:32

+0

不客氣,我很高興我能幫上忙。 – marapet 2011-03-26 16:43:29