System.Data.OptimisticConcurrencyException (Инструкции по обновлению, вставке или удалению из хранилища затронули непредвиденное число строк (0). Сущности могли быть изменены или удалены с момента их загрузки. Обновите записи диспетчера ObjectStateManager.).
Такое исключение выбрасывается при попытке изменения полей строк в базе данных, которая построена на ADO.NET Entity Framework и System.Data.SQLite. Эту проблему я описывал в посте "ADO.NET Entity Framework и System.Data.SQLite - попытка глубокого прогружения".
Проблема решилась! Тип данных полей. В документации по SQLite написано:
...The following table shows how many common datatype names from more traditional SQL implementations are converted into affinities by the five rules of the previous section...
Потрясающий факт в том, что движок SQLite при создании таблиц, принимал любые типы данных (uniqueidentifier, bit, smallint, tinyint и т.п.). Мало того, он не краснея, выдавал такие типы при запросе. Зато при вставке, обновлении или удалении данных слал в сад, при этом ругался не он сам, а почему-то, ни в чем не повинный ObjectStateManager из сборки System.Data.Entity.
Короче, System.Data.SQLite, ни хрена ничего сам не преобразовывает. Нужно преобразовать все типы вручную по правилам Datatypes In SQLite Version 3 - 2.2 Affinity Name Examples (см. таблицу) и можно наслаждаться Entity Framework`ом.