2016-01-27 11 views
9

Używam System.Data.Sqlite 1.0.99 od C#, z nim można wywołać db z EF. Mam do czynienia z problemem przy wyborze FirstOrDefault przez Guid powrót null (ale rzędzie z takimi GUID istnieje w bazie danych):System.Data.Sqlite 1.0.99 porównanie GUID nie działa

var user = context.Users.FirstOrDefault(x => x.Id == userId); //returns null 
//or 
var user = context.Users.Where(x => x.Id == userId).ToArray(); //returns empty array 

Znaleziono kilka informacji, że jest to znany problem i została ona ustalona w 1.0.95, ale uszkodzony ponownie w 1.0.97 i kolejne dwa rozwiązania:

Rozwiązanie 1: ustawić właściwość BinaryGUID na ciąg połączenia true:

Data Source=...;BinaryGUID=True; 

Rozwiązanie 2: ustawić zmienną środowiskową następny (przed dokonaniem połączenia):

Environment.SetEnvironmentVariable("AppendManifestToken_SQLiteProviderManifest", ";BinaryGUID=True;"); 

Rozwiązanie 2 działa, ponieważ (z sqlite miejscu):

AppendManifestToken_SQLiteProviderManifest - Jeśli ta zmienna jest ustawiona [do czegoś], zostanie on użyty przez System.Data .SQLite.Linq.SQLiteProviderManifest klasa (i klasa System.Data.SQLite.EF6.SQLiteProviderManifest) do modyfikowania przyszłych tokenów manifestu dostawcy przez dołączenie wartości zmiennej środowiskowej do istniejącego tokena dostawcy, jeśli taki istnieje. Zazwyczaj, aby konstruowany znacznik manifestu dostawcy był poprawny pod względem składni, wartość zmiennej środowiskowej [do dołączenia] musi rozpoczynać się od średnika.

Rozwiązanie 1 nie działa dla mnie, ponieważ, jak rozumiem, ma wpływ tylko na System.Data.SQLite.Linq.SQLiteProviderManifest.

Pytanie: Czy istnieje rozwiązanie tego problemu, a nie ustawienie zmiennej środowiskowej?

+1

Potwierdzam, że to nadal jest problem z System.Data.SQLite v1.0.104.0. Rozwiązanie 1 nie działa, a rozwiązanie 2 działa. Dodanie tej linii do konstruktora klasy częściowej na obiekcie Entity działa, dziękuję! Jeśli znalazłeś inne rozwiązanie, opublikuj wiadomość, ale na razie to wystarczy. –

+0

Cieszę się, że moje pytanie/rozwiązanie było pomocne. Dziękuję za odpowiedź! –

Odpowiedz