Какой была бы хорошая локальная база данных для приложения Silverlight? Основное назначение базы данных - локальные службы кэширования и синхронизации данных. Я не верю, что SQL в любом месте или SQLite будут работать, поскольку они используют неуправляемый код, который не будет работать в песочнице Silverlight.





@ Аарон Фишер,
Меня тоже очень интересует этот вопрос. Я ищу БД для приложений XBAP (WPF в браузере). Вот мой вопрос «Какую встроенную базу данных с поддержкой изолированного хранилища вы можете порекомендовать?»
SQLite и MSSQL CE (также известный как SQL) не работают.
VistaDB реализована в .NET и может работать с ограничениями (она поддерживает изолированное хранилище), но я ищу альтернативы.
Другой вариант - Sybase iAnywhere, но я не знаю, как развернуть его на машине конечного пользователя.
Я собираюсь попробовать DB4objects для Silverlight. Если получится, обновлю пост.
На основе этого пример кажется возможным использовать Google Gears и, следовательно, Sqlite. Основным недостатком является объем работы по интеграции и необходимость установки еще одной платформы на клиентском компьютере.
Я думал о Google Gears, но решил, что это будет тоже много накладных расходов
Если ваши потребности в кэшировании достаточно просты, и у вас не так много данных, чтобы минимизировать использование ОЗУ, возможно, вам даже не нужна полноценная база данных. Вы можете создать своего рода объектную базу данных, используя такую структуру, как словарь, и поместить в нее объекты, которые в противном случае были бы строками вашей таблицы. Затем вы можете сериализовать эти данные в файл в локальном хранилище и десериализовать его при следующем запуске приложения. Если ваши структуры данных выполнены хорошо, вы даже можете использовать Linq для запроса своей объектной базы данных.
Если ваша основная цель - свести к минимуму количество раз, когда вам нужно извлекать одни и те же данные с вашего сервера, это можно рассмотреть.
С другой стороны, это не лучший вариант, если у вас слишком много данных или если вы делаете частые записи в базу данных (поскольку тогда придется каждый раз сериализовать всю структуру на диск).
Если у вас слишком много данных, но вы все же хотите попробовать это, вы можете увидеть, есть ли логический способ разделить ваши данные на несколько файлов, которые вряд ли понадобятся одновременно. Затем вы можете выгружать неиспользуемые данные на диск и загружать их в следующий раз, когда они понадобятся программе. Конечно, если вы зайдете слишком далеко в этом подходе, вы все равно в конечном итоге напишете свою собственную систему баз данных.
Я бы хотел увидеть две вещи. 1.) Какая-то постоянная поддержка локальной базы данных или 2.) Какая-то реальная поддержка сервера базы данных без хлопот с веб-службами.
Лично я бы взял Access и OleDb. :)
И последнее ... что тип функциональности базы данных - это то, чего Flash / Flex не предлагает ... это было бы отличным способом для Microsoft отличить Silverlight и действительно дать ему преимущество.
Почему бы не использовать новую функцию SL 2 под названием «Изолированное хранилище»? Он полностью поддерживается в локальной базе данных (например, Google Gear), но, конечно же, это не база данных. Вы можете использовать формат файла XML, чтобы сохранить его.
Об этом Мотылек сообщил в своем блоге http://www.danielmoth.com/Blog/2008/04/isolatedstorage-in-siverlight-2-beta-1.html Дино сделал очень хорошее резюме на http://www.ddj.com/windows/208300036?pgno=2
Теперь есть порт sqlite для C# под названием csharp-sqlite Это обещает, когда они найдут подходящее имя.
За исключением того, что это не реализация ADO.NET, и ее фактически нельзя использовать. Это грубый перенос C-Lib на C#. Так что, если вы хотите писать в этот интерфейс в .Net и выполнять все сопоставления самостоятельно, это может сработать, но в последний раз, когда я смотрел на порт, он не работает и, вероятно, не может без серьезной доработки для поддержки концепций изолированного хранилища.
Ответ - siaqodb. Сиакодб - это настоящая база данных объектов на стороне клиента Silverlight, вы можете сохранить объект с помощью всего одной строчки кода и получить обратно объекты через LINQ. Для получения дополнительной информации взгляните на http://siaqodb.com.
Да, я думаю, что поставщик LINQ - оптимальное решение. Поскольку пространство для хранения ограничено, на самом деле у вас нет таблиц и индексов необходимость, было бы удобно иметь простой способ хранить и запрашивать объекты на клиенте через LINQ без необходимости иметь дело с низкоуровневыми файловыми потоками.
Как написать провайдер Linq. Это действительно непросто.
Существует также TurboDB, который управляется "на 100%" dataweb.de/en/products/dotnet_database.html. Не уверен, стоит ли это тоже оценивать.