Udostępnij za pośrednictwem


Porównanie z system.Data.SQLite

W 2005 roku Robert Simpson utworzył system.Data.SQLite, dostawcę SQLite dla ADO.NET 2.0. W 2010 roku zespół SQLite przejął konserwację i rozwój projektu. Warto również zauważyć, że zespół Mono rozwidlił kod w 2007 roku jako Mono.Data.Sqlite. System.Data.SQLite ma długą historię i przekształcił się w stabilnego i w pełni funkcjonalnego dostawcę ADO.NET wraz z narzędziami programu Visual Studio. Nowe wersje nadal dostarczają zestawy zgodne z każdą wersją programu .NET Framework od wersji 2.0 wstecz, a nawet z .NET Compact Framework w wersji 3.5.

Pierwsza wersja platformy .NET Core (wydana w 2016 r.) to pojedyncza, uproszczona, nowoczesna i międzyplatformowa implementacja platformy .NET. Przestarzałe interfejsy API i te, które mają nowoczesne odpowiedniki, zostały celowo usunięte. ADO.NET nie zawierało żadnych interfejsów API dla zestawu danych (w tym DataTable i DataAdapter).

Zespół programu Entity Framework był nieco zaznajomiony z bazą kodu System.Data.SQLite. Brice Lambson, były członek zespołu EF, wcześniej pomógł zespołowi SQLite dodać obsługę platformy Entity Framework w wersjach 5 i 6. Brice również eksperymentował z własną implementacją dostawcy ADO.NET SQLite w czasie, gdy planowano .NET Core. Po długiej dyskusji zespół Entity Framework postanowił stworzyć Microsoft.Data.Sqlite na podstawie prototypu Brice'a. Umożliwiłoby to utworzenie nowej lekkiej i nowoczesnej implementacji, która będzie zgodna z celami platformy .NET Core.

Przykładem tego, co rozumiemy przez bardziej nowoczesny sposób, jest poniższy kod tworzenia funkcji zdefiniowanej przez użytkownika zarówno w System.Data.SQLite, jak 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));

W 2017 r. platforma .NET Core 2.0 doświadczyła zmiany strategii. Zdecydowano, że zgodność z programem .NET Framework była niezbędna do sukcesu platformy .NET Core. Wiele usuniętych interfejsów API, w tym interfejsów API zestawu danych, zostało dodanych z powrotem. Podobnie jak w przypadku wielu innych, ten odblokowany System.Data.SQLite umożliwia również przenoszenie go do platformy .NET Core. Oryginalny cel Microsoft.Data.Sqlite, aby był lekki i nowoczesny, jednak wciąż pozostaje. Zobacz ADO.NET ograniczenia, aby uzyskać szczegółowe informacje na temat interfejsów API ADO.NET, które nie są implementowane przez usługę Microsoft.Data.Sqlite.

Podczas dodawania nowych funkcji do Microsoft.Data.Sqlite, brany jest pod uwagę projekt System.Data.SQLite. Staramy się, jeśli to możliwe, zminimalizować zmiany między nimi, aby ułatwić przejście między nimi.

Typy danych

Największą różnicą między usługami Microsoft.Data.Sqlite i System.Data.SQLite jest sposób obsługi typów danych. Zgodnie z opisem w Typy danych, Microsoft.Data.Sqlite nie próbuje ukryć podstawowego dziwactwa SQLite, która pozwala sprecyzować dowolny łańcuch jako typ kolumny i ma tylko cztery typy prymitywne: INTEGER, REAL, TEXT i BLOB.

System.Data.SQLite nakłada dodatkowe zasady semantyczne na typy kolumn, odpowiadając je bezpośrednio typom platformy .NET. Daje to dostawcy bardziej uporządkowane wrażenie, ale ma pewne niedociągnięcia. Na przykład musieli wprowadzić nową instrukcję SQL (TYPES), aby określić typy kolumn wyrażeń w instrukcjach SELECT.

Parametry połączenia

Microsoft.Data.Sqlite ma o wiele mniej parametrów połączenia słowa kluczowe. W poniższej tabeli przedstawiono alternatywy, których można użyć zamiast tego.

Słowo kluczowe Alternatywa
Rozmiar pamięci podręcznej Wyślij PRAGMA cache_size = <pages>
Błąd w przypadku braku Użyj Mode=ReadWrite
FullUri Użyj słowa kluczowego Źródło danych
Tryb dziennika Wyślij PRAGMA journal_mode = <mode>
Starszy format Wyślij PRAGMA legacy_file_format = 1
Maksymalna liczba stron Wyślij PRAGMA max_page_count = <pages>
Rozmiar strony Wyślij PRAGMA page_size = <bytes>
Tylko do odczytu Użyj Mode=ReadOnly
Synchroniczny Wyślij PRAGMA synchronous = <mode>
Uri Użyj słowa kluczowego Źródło danych
Użyj kodowania UTF-16 Wyślij PRAGMA encoding = 'UTF-16'

Autoryzacja

Microsoft.Data.Sqlite nie ma żadnego interfejsu API uwidaczniającego wywołanie zwrotne autoryzacji SQLite. Użyj problemu , #13835,, aby przekazać opinię na temat tej funkcji.

Powiadomienia o zmianie danych

Microsoft.Data.Sqlite nie ma żadnego interfejsu API, który udostępnia powiadomienia o zmianie danych SQLite. Użyj #13827, aby przekazać opinię na temat tej funkcji.

Moduły tabeli wirtualnej

Microsoft.Data.Sqlite nie ma żadnego interfejsu API do tworzenia modułów tabel wirtualnych. Aby przekazać opinię na temat tej funkcji, użyj #13823.

Zobacz też