2016-01-27 25 views
9

を動作しません。私はそれであなたがEFとDBために呼び出すことができ、C#のからSystem.Data.Sqlite 1.0.99を使用しています。 FirstOrDefaultを選択するとき、私はそれがnullを返す(そのようなGUIDがデータベースに存在すると行)Guidによって問題に直面:System.Data.Sqlite 1.0.99 GUIDの比較が

一部これは問題を知られており、それは1.0.95で修正されたという情報が、壊れた実測
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 

再び1.0.97と次の二つのソリューションで:

解決策1:trueに接続文字列にBinaryGUIDプロパティを設定します。

Data Source=...;BinaryGUID=True; 

解決方法2:設定された次の環境変数(あなたが作る前に接続):

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

ソリューションので(sqliteのサイトから2つの作品、):

AppendManifestToken_SQLiteProviderManifest - この環境変数は、[何も]設定されている場合は、System.Dataで使用されます.SQLite.Linq.SQLiteProviderManifestクラス(およびSystem.Data.SQLite.EF6.SQLiteProviderManifestクラス)を使用して、既存のプロバイダマニフェストトークン(存在する場合)に環境変数の値を追加して、将来のプロバイダマニフェストトークンを変更します。通常、構築されたプロバイダマニフェストトークンを構文的に正しいものにするためには、環境変数の値はセミコロンで始まる必要があります。

解決策1は、わかりましたが、わかりましたが、System.Data.SQLite.Linq.SQLiteProviderManifestにのみ効果があります。

質問:環境変数を設定するのではなく、この動作を修正するソリューションはありますか?

+1

私はこれがSystem.Data.SQLite v1.0.104.0の問題であることを確認します。解決策1は機能せず、解決策2が機能します。 Entityオブジェクトの部分クラスのコンストラクタにこの行を追加すると、うまくいきます!あなたが別の解決策を見つけた場合は、投稿してください。しかし、今は十分です。 –

+0

私の質問/解決策が役立ってうれしいです。返信ありがとう! –

答えて