sqlite 你能告诉我为什么DapperExtension的Update方法无法执行吗?

pb3s4cty  于 2023-06-06  发布在  SQLite
关注(0)|答案(1)|浏览(227)

我正在使用SQLite,Dapper和DapperExtensions,所有最新的都是通过NuGet。
下面是我的表的模式……

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)
);

其中有一行包含以下数据
ID =“0”
名称=“测试库”
描述=“这是测试库”
Version =“1.2.3.4“
这是我那张table的POCO

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

下面是我如何初始化DapperExtensions(我的表是复数 * 除了 * 这个表)...

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

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

下面是让我从数据库中读取ID为0的单行的代码……

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

那很好然而,这失败了……

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

这里有个例外。。
System.Data.SQLite.SQLiteException occurred ErrorCode=1 HResult=-2147467259 Message=SQL逻辑错误或“.“附近缺少数据库:语法错误Source=System.Data.SQLite StackTrace:at System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn,String strSql,SQLiteStatement previous,UInt32 timeoutMS,String& strRemain)InnerException:
不知道为什么!我试图弄清楚如何查看它生成的SQL,但我不知道如何做到这一点,甚至不知道这是否可能。

6ioyuze2

6ioyuze21#

问题是DapperExtensions中SQL生成的默认方言是SqlServer,这意味着内部生成的SQL是用表别名创建的,而Sqlite不支持。在发出任何命令之前,您需要将Dapper Extensions SQL方言更改为Sqlite:

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

一旦这一点被改变,Dapper Extensions将创建Sqlite格式的SQL命令。

相关问题