我正在使用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,但我不知道如何做到这一点,甚至不知道这是否可能。
1条答案
按热度按时间6ioyuze21#
问题是DapperExtensions中SQL生成的默认方言是SqlServer,这意味着内部生成的SQL是用表别名创建的,而Sqlite不支持。在发出任何命令之前,您需要将Dapper Extensions SQL方言更改为Sqlite:
一旦这一点被改变,Dapper Extensions将创建Sqlite格式的SQL命令。