Yvision.kzYvision.kz
kk
Разное
Разное
399 767 постов40 подписчиков
Всяко-разно
-4
22:01, 22 августа 2010

ADO.NET Entity Framework и System.Data.SQLite - попытка глубокого погружения.

Да, это была попытка, без особых успехов.

Радужные перспективы малых веб-приложений, с собственным SQL-движком, мощными запросами на LINQ to Entities и "рисованием" красивых моделей баз данных, пропали по одной простой причине.

По порядку: Есть база SQLite (которая представляет из себя файл с расширением *.db), сборка System.Data.SQLite (собственно сам движок базы данных) и Visual Studio (2008).

Поскольку сборка движка реализует DbProviderFactory, то я без труда создал провайдер базы, соединение и набросал несколько стандартных запросов чтения, вставки, обновления и удаления (CRUD). Работает!

Но это вчерашний день, поскольку писать SQL-запросы "ручками", как-то неинтересно.

Поэтому добавил в проект модель ADO.NET EDM. Мастер создания модели запросил подключение к базе, я создал ему SQLite поставщика. Мастер сказал "ОК, давай файл с базой данных". Указал путь. И мастер без проблем накидал мне красивые таблицы и связи в визуальном редакторе. Красота.

Теперь, у меня все таблицы в базе, представлены классами. Всё компилируется. Накидал наши стандартные запросы, используя технологию LINQ to Entities. Теперь, всю "черную" работу (создание подключения, транзакции, длинные SQL-запросы, запихивание результатов в классы) сделает за меня эта самая технология.

Но мне пришлось идти в сад, по воле разработчиков из Майкрософт, поскольку всё, чего я мог добиться, это только читать базу. Остальное ну никак не хотело работать.

Причина кроется в весьма сомнительном классе ObjectStateManager. На все попытки вставить/обновить/удалить он отвечает, что мол, ок, успешно! Но в базе ничего не меняет, мерзавец, негодяй...

Короче, возвращаясь во вчерашний день, пишу соединения, связывания и SQL-запросы вручную (под ржанье PHP-скрипачей).

Найдется время, скачаю .NET Reflector для "раскопок" сборки System.Data, чтобы понять, какого хрена, класс ObjectStateManager, не желает работать с движком SQLite.

-4
918
0