SQLite на межплатформенных приложениях C#

Может кто-то помогать/вести мне с использованием lib SQLite на Linux (МОНО) и Windows (.NET)

На Linux я использую собственный моно sqlite клиент, и на окнах я использую http://sqlite.phxsoftware.com/

есть ли способ определить директивы 'использования' как это:

#if (linux)
  using Mono.Data.Sqlite;
#else
  using System.Data.SQLite;

Другой проблемой является маленький differencies на обеих реализациях, как:

cmd = new SqliteCommand(); // mono
cmd = new SQLiteCommand(); // sqlite.phxsoftware.com

Ожидание любой справки

Если Вы будете знать лучше или simplier способ сделать это, то он будет очень благодарный за информацию.

Спасибо

16
задан alienn 8 March 2010 в 10:38
поделиться

7 ответов

Существует полностью управляемая трансляция SQLite . Если вы используете это, вы можете использовать одну и ту же DLL в Mono и Windows.

Другой способ решить вашу проблему - создать собственный интерфейс базы данных, а затем реализовать этот интерфейс один раз для Mono и один для Microsoft .NET в отдельных библиотеках DLL. (Примерно так же, как вы создаете код, который работает с разными базами данных)

1
ответ дан 30 November 2019 в 23:05
поделиться

ORM-библиотека с открытым исходным кодом Vici CoolStorage работает на Windows (.NET), Mono (Mac, Linux и Windows) и MonoTouch (iPhone), используя драйвер SQLite этой платформы.

Чтобы использовать ее на этих разных платформах, вам не нужно ничего менять в исходном коде. Просто перекомпилируйте, и все должно работать.

0
ответ дан 30 November 2019 в 23:05
поделиться

IMO вам следует сначала попытаться найти реализацию, которая работает и в Windows, и в Linux. Если это не сработает, создайте сборку, определяющую общий интерфейс для SQLite, и поместите весь ваш код "#if LINUX" в эту сборку. Затем используйте эту сборку в основном приложении, чтобы не загромождать основное приложение всеми #определениями.

0
ответ дан 30 November 2019 в 23:05
поделиться

Поставщик SQLite ADO.NET на самом деле представляет собой сборку смешанного режима, которая содержит собственную библиотеку SQLite. Эта собственная библиотека, конечно же, отличается от Windows и Linux, поэтому этот поставщик не работает в Linux. Однако существует управляемая версия поставщика ( SQLite-1.0.65.0-managedonly-binaries.zip на странице загрузки). Поэтому я думаю , что вам просто нужно использовать эту версию провайдера и предоставить вместе с ней соответствующую родную динамическую библиотеку SQLite (.dll в Windows, .so в Linux)

0
ответ дан 30 November 2019 в 23:05
поделиться

Вы можете решить разницу в именовании с помощью alias

#if (linux)
  using SqlCommand = Mono.Data.Sqlite.SqliteCommand;
#else
  using SqlCommand = System.Data.SQLite;

Использование разных сборок для разных сборок - более сложная задача, я думаю... вы можете посмотреть документацию MSBuild

2
ответ дан 30 November 2019 в 23:05
поделиться

Вы можете просто использовать монореализацию SQLite как для Windows, так и для Linux версии вашего программного обеспечения. Просто включите сборку mono для SQLite в пакет вашего программного обеспечения и обращайтесь к ней локально.

Как вы можете прочитать здесь в последнем посте, вы можете использовать управляемый способ mono исключительно в вашем коде и вам нужно просто перераспределить родную часть для windows по-другому. Но вам не придется возиться с управляемыми реализациями и избыточным кодом через это.

1
ответ дан 30 November 2019 в 23:05
поделиться

Вы можете использовать csharp-sqlite , который является портом Sql-Lite на C #. Он очень активен и основан на версии SqlLite 3.6.22. См. Комментарии Мигеля о попытках ускорить это.

4
ответ дан 30 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: