¿Puedes decir por qué el método de actualización de DapperExtension no se puede ejecutar?

c# dapper dapper-extensions sql sqlite

Pregunta

Estoy usando SQLite, Dapper y DapperExtensions, todo lo último a través de NuGet.

Aquí está el esquema de mi mesa ...

CREATE TABLE `LibraryInfo` (
    `Id`    INTEGER NOT NULL,
    `Name`  TEXT NOT NULL CHECK(length ( Name ) > 0),
    `Description`   TEXT,
    `Version`   TEXT NOT NULL CHECK(length ( Version ) > 0),
    PRIMARY KEY(Id)
);

En él tengo una sola fila con los siguientes datos

Id = "0"
Nombre = "Biblioteca de prueba"
Description = "Esta es la biblioteca de pruebas"
Versión = "1.2.3.4"

Aquí está mi POCO para esa mesa ...

public class LibraryInfo
{
    public int    Id          { get; set; }
    public string Name        { get; set; }
    public string Description { get; set; }
    public string Version     { get; set; }
}

Así es como inicializo DapperExtensions (mis tablas son plurales, excepto esta tabla) ...

DapperExtensions.DapperExtensions.DefaultMapper = typeof(PluralizedAutoClassMapper<>);

public class LibraryInfoMapper : ClassMapper<LibraryInfo>
{
    public LibraryInfoMapper()
    {
        Table(nameof(LibraryInfo));
        AutoMap();
    }
}

Aquí está el código que me permite leer esa única fila con el ID de 0 de la base de datos ...

var libraryInfo = connection.Get<LibraryInfo>(0);

Eso funciona bien Sin embargo, esto falla ...

libraryInfo.Description = "Test";
connection.Update(libraryInfo);

Aquí está la excepción ...

Se produjo System.Data.SQLite.SQLiteException ErrorCode = 1 HResult = -2147467259 Mensaje = error de lógica SQL o falta de base de datos cerca de ".": Error de sintaxis Origen = System.Data.SQLite StackTrace: en System.Data.SQLite.SQLite3.Prepare ( SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String y strRemain) InnerException:

No tengo idea por qué! Tratando de averiguar cómo ver qué SQL está generando, pero no sé cómo hacerlo o incluso si es posible.

¡¡¡Ayuda!!!

Respuesta aceptada

El problema es que el dialecto predeterminado para la generación de SQL dentro de DapperExtensions es SqlServer, lo que significa que el SQL generado internamente se crea con alias de tabla, que Sqlite no admite. Debe cambiar el dialecto SQL de las Extensiones Dapper a Sqlite antes de emitir ningún comando:

DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.SqliteDialect();

Una vez que esto se modifique, Dapper Extensions creará comandos SQL en formato Sqlite.



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué