2009-08-30 2 views
1

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

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 красиво создает свойство Пользователей в активной записи класса Club, который относится к столу членов. Однако, если я делаю одни и те же вызовы через свойство Members класса Club activerecord, некоторые возвращают null. т.е .:

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); 

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

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

Dave Head

ответ

2

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

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

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

Спасибо за ответ, Роб. Это действительно работает. Я считаю, что у меня есть SQL Profiler, но не установлен. У меня есть полная копия SQL Server, но у меня есть только SQL Express. Я посмотрю дальше, когда у меня появится передышка. Dave – 2009-09-02 18:33:30

Смежные вопросы