Представьте себе, что вы пишете какую-то часть в большом проекте.
Естественно предположить, что в этом проекте используют O/RM (IdeaBlade, если кому интересно).
И вы пишете запрос к базе данных. Предположим вам надо выбрать клиентов, живущих на какой-то улице. Естественно предположить, что у вас есть таблицы Client, Address, City, Street. Естественно предположить, что ту же самую таблицу адресов хочется использовать для адресов например фирм, организационных подразделений и так далее. После недолгих размышлений вы приходите к выводу, что оптимальнее всего забить на FK и сделать там, где нужен адрес, поле addressId (соответственно можно делать почтовый и юридический адрес, например), а в таблице адресов будет не куча линков по всем возможным связям, а одно поле contextId (как реальные пацаны, вы естественно забили на использование интов в качестве ключей и используете гуиды). Кто хочет поспорить - велкам!
Вам для построения объектного запроса нужно указать эту связь. Естественно, что такие связи автоматический генератор не распознал, и их приходится добавлять вручную. Все связи в этой O/RM хранятся в классе EntityRelations в виде статических ридонли полей. Вы добавляете свой класс CustomEntityRelations и добавляете туда свою связку, указывая исходное поле и дочернее. Пишете запрос, используя эту связку и запускаете приложение.
Минута тишины - и вылетает ошибка : ContextSwitchDeadlock.
В подробностях этой ошибки следующее: The CLR has been unable to transition from COM context 0x7968976 to COM context 0x654564. Blah-blah-blah.
Если быть до конца честным, то это скорее варнинг в визуал студии, который срабатывает, когда студия думает что произошел deadlock.
А теперь, внимание - вопрос: что было причиной ошибки?
Можете спрашивать все, что хотите, я буду выступать в роли интернета и визуалстудии, то есть помогать вам дойти до верного ответа. Обещаю что в конце вас ждет сюрприз :-)
2Паша Самолысов: Попробуй только запостить спойлер!!!