【发布时间】:2019-06-21 09:22:02
【问题描述】:
自原始帖子以来的新信息。这段代码成功地检索了一个实体,这让我认为 QueryMultiple 映射不同于 Query。这是真的吗?
using (var multi = sqlConn.QueryMultiple(sqlStmt, new { MytableId = mytableinstance.MytableId }))
{
var fullEnt = multi.Read<MytableSource>();
}
我要做的是使用 Dapper 根据父表的 FK 列值查询子表,以 SQLite 作为数据库。下面的代码给了我错误
提供给命令的参数不足
谁能指出我的错误?
注意 - 我也在使用 Dapper.Contrib。 .NET 框架 4.7.2。
谢谢。
PRAGMA foreign_keys = '1';
CREATE TABLE "Mytable" (
"MytableId" INTEGER Primary Key AutoIncrement,
"MytableName" TEXT UNIQUE,
"Stamp" TEXT
);
CREATE TABLE "MytableSource" (
"MytableSourceId" INTEGER Primary Key AutoIncrement,
"MytableId" INTEGER,
"SourceBlob" BLOB,
"Stamp" TEXT,
FOREIGN KEY("MytableId") REFERENCES "Mytable"("MytableId")
);
[Table("Mytable")]
public class Mytable
{
[Key]
public long MytableId { get; set; }
public String MytableName { get; set; }
public String Stamp { get; set; }
}
[Table("MytableSource")]
public class MytableSource
{
[Key]
public long MytableSourceId { get; set; }
public long MytableId { get; set; }
public String SourceBlob { get; set; }
public String Stamp { get; set; }
}
var sqlStmt = "Select * From MytableSource Where MytableId = @MytableId";
var sqlConn = new SQLiteConnection( this.ConnectionString );
using ( sqlConn )
{
sqlConn.Open();
var fullEnt = sqlConn.Query<MytableSource>(sqlStmt, new SQLiteParameter("@MytableId" , mytableinstance.MytableId )).FirstOrDefault();
this.MytableSourceCurrent = fullEnt;
}
未知错误 提供给命令的参数不足
【问题讨论】:
-
试试
new SQLiteParameter("MytableId", ...)吧? -
@LasseVågsætherKarlsen 我试过了(删除@)并得到了相同的结果。谢谢。
-
.Query<MytableSource>(sqlStmt, new { MytableId = mytableinstance.MytableId })呢? -
虽然问题中的示例看起来不错,但我的问题是由于link
SQLite parameter names are case-sensitive. Ensure that the parameter names used in SQL match the case of the anonymous object's properties.中提到的 Dapper 限制我的类属性名称的大小写与参数的大小写不同。
标签: c# sqlite dapper system.data.sqlite