Ich benutze SQLite, Dapper und DapperExtensions, alles über NuGet.
Hier ist das Schema meines Tisches ...
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)
);
Darin habe ich eine einzelne Zeile mit folgenden Daten
Id = "0"
Name = "Testbibliothek"
Description = "Dies ist die Testbibliothek"
Version = "1.2.3.4"
Hier ist mein POCO für diesen Tisch ...
public class LibraryInfo
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string Version { get; set; }
}
So initialisiere ich DapperExtensions (meine Tabellen sind Plural außer dieser Tabelle) ...
DapperExtensions.DapperExtensions.DefaultMapper = typeof(PluralizedAutoClassMapper<>);
public class LibraryInfoMapper : ClassMapper<LibraryInfo>
{
public LibraryInfoMapper()
{
Table(nameof(LibraryInfo));
AutoMap();
}
}
Hier ist der Code, mit dem ich diese einzelne Zeile mit der ID 0 aus der Datenbank lesen kann ...
var libraryInfo = connection.Get<LibraryInfo>(0);
Das funktioniert gut. Dies schlägt jedoch fehl ...
libraryInfo.Description = "Test";
connection.Update(libraryInfo);
Hier ist die Ausnahme ...
System.Data.SQLite.SQLiteException aufgetreten Fehlercode = 1 HResult = -2147467259 Nachricht = SQL-Logikfehler oder fehlende Datenbank in der Nähe von ".": Syntaxfehler Quelle = System.Data.SQLite StackTrace: at System.Data.SQLite.SQLite3.Prepare ( SQLiteConnection cnn, String strSql, SQLiteStatement vorherig, UInt32 timeoutMS, String & strRemain) InnerException:
Keine Ahnung warum! Ich versuche herauszufinden, wie ich sehen kann, welche SQL generiert wird, aber ich weiß nicht, wie ich das machen soll oder ob es überhaupt möglich ist.
Hilfe!!!
Das Problem ist der Standard-Dialekt für die SQL-Generierung in DapperExtensions ist SqlServer, was bedeutet, dass das intern generierte SQL mit Tabellenaliasen erstellt wird, die Sqlite nicht unterstützt. Sie müssen den Dapper-Extensions-SQL-Dialekt in Sqlite ändern, bevor Sie Befehle eingeben:
DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.SqliteDialect();
Sobald dies geändert wurde, erstellt Dapper Extensions SQL-Befehle im SQLite-Format.