c# - ファースト - sqlitemigrationsqlgenerator




SQLite Entity Framework 6プロバイダはGuidsをどのように処理しますか? (2)

私はついにこの問題に答えました。

私の問題は、SQLite Entity Framework 6プロバイダがコード内のリテラルGuidをSQLに正しく変換する処理をしないことです。 つまり、フォームのLinq式

context.MyEntity.Where( x => x.GuidColumn == new Guid("xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx") )

次のSQLに変換されます。

SELECT GuidColumn, Column1, Column2, . . . Column n
FROM MyEntity AS Extent1
WHERE Extent1.GuidColumn = 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

列に格納された値がバイト配列なので、これは間違っています。

このSQLiteサイトの問題報告によると、SQLiteチームはこれをプロバイダのバグとみなし、リリース1.0.95.0で修正するように努めています。 私はそれがいつリリースされるかわからないが、少なくとも彼らはそれを問題として認識し、それを修正しようとしている。

私はGuidsをサポートしていた別の製品からSQLiteに製品のデータベースを移植しています。 わかっているように、SQLiteはGuidsをサポートしていません。 私はデータベース(データベース)からエンティティフレームワーク6モデルを作成しました。コードから渡されたGuidとGuidを比較するC#からクエリを作成する必要があります。

SQLite Entity FrameworkプロバイダがGuidsをどのように処理するかに関するドキュメントは見つかりません。 ウェブ検索でも私にとって役に立たないものは見つかりませんでした。 SQLiteでEntity Frameworkを使用することに関するちょっとした疑問。

誰かが私にドキュメンテーションを教えてもらえますか、あるいはEF6モデルを通してSQLiteデータベースのGuidsを使って作業する方法を教えてください。


これは1.0.95で解決されましたが、1.0.97で再び壊れたようです。 解決策は、接続文字列のBinaryGUIDプロパティをtrueに設定し、次の環境変数を設定することです(接続する前に)

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

データソース= c:\ mydb.db;バージョン= 3; BinaryGUID = True;

https://www.connectionstrings.com/sqlite/





system.data.sqlite