Запрос SingleOrDefault возвращает ноль (иногда), даже если данные там - PullRequest
1 голос
/ 30 августа 2009

Я новичок в SubSonic и пишу свое первое приложение вместе с ним. У меня есть база данных с двумя таблицами под названием Member и Club. Таблица Club имеет три поля, которые связаны с первичным ключом (ID) в таблице Member (PresidentID, VicePresidentID и TreasurerID). Если я сделаю три вызова Member.SingleOrDefault, они все вернут действительные данные. i.e.:

President = Member.SingleOrDefault(x => x.ID == club.PresidentID);
VicePresident = Member.SingleOrDefault(x => x.ID == club.VicePresidentID);
Treasurer = Member.SingleOrDefault(x => x.ID == club.TreasurerID);

SubSonic красиво создает свойство Members в классе активных записей Club, которое ссылается на таблицу Members. Однако, если я совершаю те же вызовы через свойство Members класса activerecord Club, некоторые из них возвращают нули. i.e.:

President = Club.Members.SingleOrDefault(x => x.ID == club.PresidentID);
VicePresident = Club.Members.SingleOrDefault(x => x.ID == club.VicePresidentID);
Treasurer = Club.Members.SingleOrDefault(x => x.ID == club.TreasurerID);

Один или, возможно, два вызова вернут данные, но другие вернут ноль. Это происходит с одинаковыми идентификаторами участников. Что я делаю не так?

Большое спасибо за любые указатели.

Дейв Хед

1 Ответ

2 голосов
/ 30 августа 2009

Я думаю, что его путают с настройкой IQueryable FK - это означает, что при создании дочерних IQueryables не учитываются все внешние ключи.

Если у вас есть SQL Profiler, было бы здорово узнать, что генерируется при этих вызовах. Сейчас вы можете обойти это, используя:

President = Members.SingleOrDefault(x=>x.ID==club.PresidentID && x.ClubID=club.ClubID);
...