LINQ to SQL в многопоточном приложении
От: Obukhov Россия  
Дата: 02.12.11 12:52
Оценка:
База SQLite через "ADO.NET 3.5SP1 Entity Framework support for SQLite"
В приложении есть объет базы содержаший DataContext

Соединяюсь с БД в gui потоке,
Создаю и модифицирую объекты как в gui, так и в дочерних потоках.

После каждого изменения объекта вызываю
dataContext.SubmitChanges( ConflictMode.ContinueOnConflict );

как в основном, так и в дочерних потоках.

Переодически натыкаюсь на такие баги:

1) вываливаются исключения ChangeConflictException — борюсь с помощью
dataContext.ChangeConflicts.ResolveAll(RefreshMode.KeepCurrentValues);

и затем повторно SubmitChanges
НО! при этом реально в БД эти данные остаются старыми (как будто я никаких ResolveAll не вызывал и повторно не сабмитил)

2) По завершения работы дочерних потоков, в главном потоке меняю состояние результирующего объекта и делаю submit — исключений не возникает,
но после повторного запуска приложения получаю предпоследнее состояние результирующего объекта !! WTF !!!

Может кто сталкивался с многопоточностью в LINQ to SQL ?
Помогите советом.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.