Похоже, ваши кэшированные объекты все еще привязаны к исходному DataContext , с которым они запрашивались. Одним из способов решения этой проблемы (который нарушает правило оптимальной практики сохранения короткого жизненного цикла DataContext) является кэширование DataContext вместе с вашими сущностями, а затем использование этого кэшированного контекста, когда вы хотите удалить или обновить кэшированные сущности.
Вы упоминаете, что кэшированные объекты используются «двумя запросами позже» - если все эти запросы происходят в течение короткого промежутка времени, то нарушение правила короткого жизненного цикла может не быть проблемой.
Другой вариант - кэшировать объекты, которые основаны на сущностях, но являются не сущностями, и когда пришло время обновить сущности значениями, хранящимися в кешированных объектах, не являющихся сущностями запросить чистые сущности в новом DataContext, обновить эти сущности и затем сохранить во вновь созданном DataContext.
Есть и другие способы сделать это - я обнаружил, что книга LINQ в действии очень полезна в таких случаях.