У нас приложение написано с использованием Linq to SQL но в нем много обращений к базе и большая часть из которых очень сильно похожа.
Наверное слышали про UZTO http://uzto.netdec.uz
Это MDI приложение и для каждого объекта открывается своя форма для редактирования объекта.
У каждой формы свой контекст (DataContext).
Мы решили воспользовать предлагаемой возможностью CompiledQuery!
Но вот проблема при первом выполнение запроса CompiledQuery запоминается контекст, но при последующих выполнениях этого же запроса в другом контексте, он НИЧЕГО не знает о полученных объектах, кажется что он получил результат для старого контекста. По этой причине когда мы пытаемся сохранить объект то он ругается, что объекты из другого контекста и это не поддерживается Linq to SQL.
Текст ошибки:
===================================
An attempt has been made to Attach or Add an entity that is not new, perhaps having been loaded from another DataContext. This is not supported. (System.Data.Linq)
------------------------------
Program Location:
at System.Data.Linq.ChangeTracker.StandardChangeTracker.Track(MetaType mt, Object obj, Dictionary`2 visited, Boolean recurse, Int32 level)
at System.Data.Linq.ChangeTracker.StandardChangeTracker.Track(Object obj, Boolean recurse)
at System.Data.Linq.ChangeTracker.StandardChangeTracker.Track(Object obj)
at System.Data.Linq.ChangeProcessor.TrackUntrackedObjects(MetaType type, Object item, Dictionary`2 visited)
at System.Data.Linq.ChangeProcessor.TrackUntrackedObjects(MetaType type, Object item, Dictionary`2 visited)
at System.Data.Linq.ChangeProcessor.TrackUntrackedObjects()
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
...