Как я могу получить доступ или заменить LINQ на SQL IdentityManager? - PullRequest
0 голосов
/ 21 января 2010

Мне нужно выяснить, подключен ли объект с определенным первичным ключом к DataContext, и получить объект из DataContext, если он присоединен. Есть ли способ сделать это, не требуя отражения с полным доверием?

В идеале я хотел бы вызвать GetCachedObject (), но для этого мне пришлось бы использовать рефлексию, и я почти уверен, что должен быть в режиме полного доверия, который не будет работать в размещенная среда.

Я открыт для нестандартного мышления. Кроме того, я могу полностью контролировать сгенерированный код LinqToSql, так что это тоже не проблема. Я могу переписать свой класс DataContext. Есть ли способ получить доступ к IdentityManager, заменить IdentityManager моей собственной абстракцией и т. Д.? Любые идеи приветствуются.

Ответы [ 2 ]

0 голосов
/ 14 сентября 2011

Если вы управляете сгенерированным кодом, почему бы не позволить ctor каждой сущности зарегистрироваться в словаре для каждого потока. Таким образом, у вас есть все существующие сущности текущего потока. Если у вас есть один текстовый текст в каждом потоке, теперь у вас есть список всех загруженных (но не обязательно прикрепленных) сущностей.

0 голосов
/ 22 января 2010

Один потенциальный «обходной путь». Я не пробовал, поэтому не знаю, сработает ли это ... ... но так как вы сказали «из коробки»: назначьте плохое соединение или плохую строку подключения к DC, или испортите sqlconnection это уже есть. Следующий запрос по объекту по PK. Если он находится в кеше, есть большая вероятность, что L2S не заметит, что соединение плохое, поэтому вы должны вернуть объект обратно. Если его нет в кеше, L2S должен попробовать туда и обратно db, и вы получите исключение.

Как я уже сказал, грязный и непроверенный, но стоит попробовать, если вы действительно хотите избежать использования отражения для получения доступа к диспетчеру идентификации / трекеру изменений. Не уверен, если это сэкономит вам какие-либо циклы процессора, хотя ...:)

...