Sdílet prostřednictvím


Porovnání se System.Data.SQLite

V roce 2005 vytvořil Robert Simpson system.Data.SQLite, zprostředkovatele SQLite pro ADO.NET 2.0. V roce 2010 převzal tým SQLite údržbu a vývoj projektu. Je také vhodné poznamenat, že tým Mono forkoval kód v roce 2007 jako Mono.Data.Sqlite. System.Data.SQLite má dlouhou historii a vyvinul se do stabilního a plnohodnotného poskytovatele ADO.NET, který je součástí nástrojů sady Visual Studio. Nové verze nadále dodávají sestavení kompatibilní s každou verzí rozhraní .NET Framework zpět na verzi 2.0 a dokonce i .NET Compact Framework 3.5.

První verze .NET Core (vydaná v roce 2016) byla jednoduchá, odlehčená, moderní a implementace .NET napříč platformami. Zastaralá rozhraní API a ta s moderními alternativami byla záměrně odebrána. ADO.NET nezahrnovalo žádná z rozhraní API datové sady (včetně DataTable a objektu DataAdapter).

Tým Entity Framework byl poněkud obeznámen s základem kódu System.Data.SQLite. Brice Lambson, bývalý člen týmu EF, dříve pomohl týmu SQLite přidat podporu pro Entity Framework verze 5 a 6. Brice také experimentoval s vlastní implementací poskytovatele SQLite ADO.NET přibližně ve stejnou dobu, kdy se plánuje .NET Core. Po dlouhé diskuzi se tým Entity Framework rozhodl vytvořit Microsoft.Data.Sqlite na základě prototypu Brice. To by jim umožnilo vytvořit novou jednoduchou a moderní implementaci, která by odpovídala cílům .NET Core.

Jako příklad toho, co myslíme modernější verzí, je zde kód, který vytvoří uživatelem definovanou funkci v System.Data.SQLite i Microsoft.Data.Sqlite.

// System.Data.SQLite
connection.BindFunction(
    new SQLiteFunctionAttribute("ceiling", 1, FunctionType.Scalar),
    (Func<object[], object>)((object[] args) => Math.Ceiling((double)((object[])args[1])[0])),
    null);

// Microsoft.Data.Sqlite
connection.CreateFunction(
    "ceiling",
    (double arg) => Math.Ceiling(arg));

V roce 2017 došlo ke změně strategie v .NET Core 2.0. Bylo rozhodnuto, že pro úspěch .NET Core byla důležitá kompatibilita s rozhraním .NET Framework. Mnoho odebraných rozhraní API, včetně rozhraní API datové sady, bylo přidáno zpět. Stejně jako u mnoha jiných, i zde bylo odblokování System.Data.SQLite, což umožnilo jeho přenos na .NET Core. Původní cíl Microsoft.Data.Sqlite, aby byl lehký a moderní, však stále platí. Podrobnosti o rozhraních API ADO.NET, která nejsou implementovaná microsoft.Data.Sqlite, najdete v tématu ADO.NET omezení.

Při přidání nových funkcí do Microsoft.Data.Sqlite se bere v úvahu návrh System.Data.SQLite. Pokud je to možné, snažíme se minimalizovat změny mezi těmito dvěma, aby se mezi nimi usnadnil přechod.

Datové typy

Největší rozdíl mezi Microsoft.Data.Sqlite a System.Data.SQLite je způsob zpracování datových typů. Jak je popsáno v části Datové typy, Microsoft.Data.Sqlite se nepokouší skrýt základní zvláštnosti SQLite, které umožňují zadat libovolný řetězec jako typ sloupce, a má pouze čtyři primitivní typy: INTEGER, REAL, TEXT a BLOB.

System.Data.SQLite aplikuje další sémantiku na typy sloupců a mapuje je přímo na typy .NET. To poskytovateli dává silnější pocit typování, ale má některé nedostatky. Museli například zavést nový příkaz SQL (TYPES), který specifikuje typy sloupců výrazů v příkazech SELECT.

Připojovací řetězce

Microsoft.Data.Sqlite má podstatně méně klíčových slov pro řetězec připojení . Následující tabulka uvádí alternativy, které je možné místo toho použít.

Klíčové slovo Alternativa
Velikost mezipaměti Odeslat PRAGMA cache_size = <pages>
FailIfMissing Použití Mode=ReadWrite
FullUri Použití klíčového slova Zdroj dat
Režim deníku Odeslat PRAGMA journal_mode = <mode>
Starší formát Odeslat PRAGMA legacy_file_format = 1
Maximální počet stránek Odeslat PRAGMA max_page_count = <pages>
Velikost stránky Odeslat PRAGMA page_size = <bytes>
Jen pro čtení Použijte Mode=ReadOnly
Synchronní Odeslat PRAGMA synchronous = <mode>
URI Použití klíčového slova Zdroj dat
UseUTF16Encoding Odeslat PRAGMA encoding = 'UTF-16'

Oprávnění

Microsoft.Data.Sqlite nemá žádné rozhraní API, které vystavuje zpětné volání autorizace SQLite. K poskytnutí zpětné vazby k této funkci použijte #13835.

Oznámení o změnách dat

Microsoft.Data.Sqlite nemá žádné rozhraní API, které vystavuje oznámení o změnách dat SQLite. K poskytnutí zpětné vazby k této funkci použijte #13827.

Moduly virtuálních tabulek

Microsoft.Data.Sqlite nemá žádné rozhraní API pro vytváření modulů virtuálních tabulek. K poskytnutí zpětné vazby k této funkci použijte #13823.

Viz také