你能说出为什么DapperExtension的Update方法无法执行吗?

时间:2016-07-08 07:34:01

标签: c# sql sqlite dapper dapper-extensions

我使用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"
  名称="测试库"
  说明="这是测试库"
  版本=" 1.2.3.4"

这是我桌上的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     错误码= 1     的HResult = -2147467259     Message = SQL逻辑错误或缺少数据库   接近&#34;。&#34;:语法错误     来源= System.Data.SQLite     堆栈跟踪:          在System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn,String strSql,SQLiteStatement previous,UInt32 timeoutMS,String&amp; strRemain)     InnerException:

不知道为什么!试图弄清楚如何查看它产生的SQL,但我不知道该怎么做,或者即使它可能。

帮助!!!

1 个答案:

答案 0 :(得分:6)

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

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

一旦更改,Dapper Extensions将以Sqlite格式创建SQL命令。