Dapper с SQLite и C # Ошибка "Недостаточно параметров, предоставленных в команду" - PullRequest
2 голосов
/ 21 июня 2019

Новая информация с оригинального поста.Этот код успешно извлекает сущность, что заставляет меня считать карты QueryMultiple иначе, чем Query.Это правда?

 using (var multi = sqlConn.QueryMultiple(sqlStmt, new { MytableId = mytableinstance.MytableId }))
 {
    var fullEnt = multi.Read<MytableSource>();
 }

Я хочу использовать Dapper для запроса дочерней таблицы на основе значения столбца FK родительского элемента с SQLite в качестве базы данных.Приведенный ниже код дает мне ошибку

Недостаточно параметров, введенных в команду

Может ли кто-нибудь указать мне на мою ошибку?

Примечание -Я также использую Dapper.Contrib..NET Framework 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;

                }

неизвестная ошибка Недостаточно параметров, введенных в команду

1 Ответ

0 голосов
/ 29 июня 2019

Я посмотрел исходный код из GitHub, искал Query< T > и вручную отследил только несколько методов.Хотя он очень абстрактный и документация скудна, сам код, по крайней мере, показывает, что ожидается объект IEnumerable.Кажется, он предпочитает объект Dapper.IDynamicParameters для коллекции, но, кроме того, не стоит перебирать код для получения более подробной информации.

Это помогло мне в тестировании:

var parameters = new DynamicParameters();
param.Add("@MytableId" , mytableinstance.MytableId);
var fullEnt = sqlConn.Query<MytableSource>(sqlStmt, parameters ).FirstOrDefault();
...