Mar*_*eIV 2 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)
);
Run Code Online (Sandbox Code Playgroud)
在其中我有一行包含以下数据
Id ="0"
Name ="Test Library"
Description ="这是测试库"
Version ="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; }
}
Run Code Online (Sandbox Code Playgroud)
这是我如何初始化DapperExtensions(我的表是复数除了这个表)...
DapperExtensions.DapperExtensions.DefaultMapper = typeof(PluralizedAutoClassMapper<>);
public class LibraryInfoMapper : ClassMapper<LibraryInfo>
{
public LibraryInfoMapper()
{
Table(nameof(LibraryInfo));
AutoMap();
}
}
Run Code Online (Sandbox Code Playgroud)
这是允许我从数据库中读取ID为0的单行的代码...
var libraryInfo = connection.Get<LibraryInfo>(0);
Run Code Online (Sandbox Code Playgroud)
这很好.但是,这失败了......
libraryInfo.Description = "Test";
connection.Update(libraryInfo);
Run Code Online (Sandbox Code Playgroud)
这是例外......
System.Data.SQLite.SQLiteException发生错误码= 1的HResult = -2147467259消息= SQL逻辑错误或丢失的数据库附近 "":语法错误源= System.Data.SQLite堆栈跟踪:在System.Data.SQLite.SQLite3.Prepare( SQLiteConnection cnn,String strSql,SQLiteStatement previous,UInt32 timeoutMS,String&strRemain)InnerException:
不明白为什么!试图找出如何查看它生成的SQL,但我不知道如何做到这一点,即使它是可能的.
救命!!!
问题是DapperExtensions中SQL生成的默认方言是SqlServer,这意味着内部生成的SQL是使用表别名创建的,Sqlite不支持.在发出任何命令之前,需要将Dapper Extensions SQL方言更改为Sqlite:
DapperExtensions.DapperExtensions.SqlDialect = new DapperExtensions.Sql.SqliteDialect();
Run Code Online (Sandbox Code Playgroud)
一旦更改,Dapper Extensions将以Sqlite格式创建SQL命令.
| 归档时间: |
|
| 查看次数: |
795 次 |
| 最近记录: |