c# entity-framework sqlite entity-framework-6 system.data.sqlite

c# - ¿Cómo maneja el proveedor SQLite Entity Framework 6 las Guids?



entity-framework entity-framework-6 (2)

Finalmente tengo una respuesta a este problema.

Mi problema es que el proveedor de SQLite Entity Framework 6 no maneja la conversión de guiones literales en el código en SQL correctamente. Es decir, una expresión Linq de la forma

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

Se convierte en el siguiente SQL:

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

Esto es incorrecto, ya que el valor almacenado en la columna es una matriz de bytes.

Según este informe de problema en el sitio SQLite , resulta que el equipo SQLite considera que esto es un error en el proveedor y están trabajando para solucionarlo en la versión 1.0.95.0. No sé cuándo se lanzará eso, pero al menos lo reconocen como un problema y lo arreglarán.

Estoy trasladando la base de datos de nuestro producto a SQLite desde otro producto que admite Guids. Como sabemos, SQLite no es compatible con Guids. He creado un modelo de entidad marco 6 de mi base de datos (primero la base de datos) y necesito crear una consulta desde C # que compare el Guid con uno pasado desde el código.

La cuestión es que no puedo encontrar ninguna documentación sobre cómo el proveedor de SQLite Entity Framework maneja Guids. Una búsqueda web tampoco encontró nada útil para mí. Solo preguntas sobre el uso de Entity Framework con SQLite.

¿Puede alguien señalarme la documentación, o quizás decirme cómo trabajar con Guids en una base de datos SQLite a través de un modelo EF6?


Parece que esto se resolvió en 1.0.95 pero se rompió nuevamente en 1.0.97. La solución es establecer la propiedad BinaryGUID en la cadena de conexión en verdadero y establecer la siguiente variable de entorno (antes de realizar la conexión)

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

Fuente de datos = c: / mydb.db; Version = 3; BinaryGUID = True;

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