c # дозвуковой 2.2: проблема отношения многих ко многим и нумерация страниц - PullRequest
0 голосов
/ 22 марта 2011

у меня есть 3 таблицы (Категории, Статьи и СтатьиКатегории).ArticleCategories имеет комбинированный PK и состоит из:

  1. ArticleID (PK, FK, int)
  2. CategoryID (PK, FK, int)

Теперь, когда я использую дозвуковые методы пейджинга, я сталкиваюсь с очень странным поведением.Возвращает вдвое больше записей, чем я ожидаю (2 ПК?).Проблема решается либо путем полного удаления страницы, либо путем добавления поля PK с именем ArticleCategoryID.

        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, но это не так.

Может быть, я упускаю что-то очевидное здесь, поэтому я заранее извиняюсь за это:)

Спасибо за ваше время С уважением, Марк

1 Ответ

0 голосов
/ 26 марта 2011

Вы также можете прочитать ответ Роба Конери в этом вопросе - он о SubSonic 3, но поскольку он говорит, что Роб думает, что таблица «многие ко многим» должна иметь первичный ключ из одного столбца для идентификации уникальная строка в любой таблице, я не думаю, что он реализовал поддержку составного ключа в SubSonic 2.

Лично я всегда добавляю столбец PK в таблицы многие-ко-многим, потому что это сильно упрощает код CRUD. Чувствую себя хорошо для меня - и если вы можете сделать это, я рекомендую пойти на это.

Мне не удалось найти официальную документацию, но я также помню (и столкнулся с проблемами ...), что всегда следует использовать столбец PK в качестве первого столбца в представлении, в противном случае подкачка страниц работает неправильно.

Проблема подкачки также может зависеть от версии базы данных. Например, реализация подкачки в SQL Server 2000 - это хак (табличные переменные и т. Д.) Из-за отсутствия соответствующих инструкций в SQL Server. Более поздние версии БД предлагают лучшие способы реализации подкачки и могут не зависеть от одного столбца PK.

И наконец, не совсем об этом вопросе, и опять же о личных предпочтениях: я стараюсь избегать SubSonic.Query и использовать вместо него SubSonic.SQLQuery. SqlQuery был добавлен позже и лучше, чем Query (см. Также этот вопрос )

...