C# 使用Dapper.Contrib和DynamicParameters插入

C# 使用Dapper.Contrib和DynamicParameters插入,c#,wpf,dapper,C#,Wpf,Dapper,问题: 是否有一种聪明的方法可以动态地向对象添加参数并将其插入SQL DB? 最好使用整洁的 我正在编写一个WPF应用程序,其中(除其他外)我正在收集问卷数据。我正在使用Dapper将c#对象映射到SQL语句 我的问题是,我不想硬编码所有列名作为对象属性,因为我有很多列名 因此,我想使用Dapper的DynamicParameters动态生成对象,Dapper可以使用Dapper.Contribinsert方法将这些对象插入数据库 我创建了一个抽象类,如下所示: public abstract

问题:

是否有一种聪明的方法可以动态地向对象添加参数并将其插入SQL DB?

最好使用整洁的


我正在编写一个WPF应用程序,其中(除其他外)我正在收集问卷数据。我正在使用Dapper将c#对象映射到SQL语句

我的问题是,我不想硬编码所有列名作为对象属性,因为我有很多列名

因此,我想使用Dapper的
DynamicParameters
动态生成对象,Dapper可以使用Dapper.Contrib
insert
方法将这些对象插入数据库

我创建了一个抽象类,如下所示:

public abstract class IDbRecord : DynamicParameters
    {
        [Key]
        public string H4Id { get; set; }
    }
并使用
DynamicParameters.Add
方法在另一个方法中添加参数

当我的参数被添加到我的
IDbRecord
派生对象时,我会尝试插入它


这是试图插入
动态参数的公共属性而不是私有
参数的内容的
插入方法。这在查看Dapper.Contrib的自述时是有意义的。我只是希望他们已经实现了
Insert()
,当对象从
DynamicParameters

中派生出来时,他们可以获取
参数
指令。我结束了对对象的迭代,并使用
StringBuilder
构建SQL Insert语句。不太优雅。但它是有效的

if (!hasData)
{
   var parameterList = new StringBuilder(null);
   var valuesList = new StringBuilder(null);
   var insertSql = new StringBuilder(null);
   parameterList.AppendFormat("Id, ");
   valuesList.Append(Id + ", ");
   foreach (var questionBase in answerList)
   {
       if (string.IsNullOrEmpty(questionBase.VariableName))
       {
           throw new ArgumentException("Question " + questionBase.QuestionNumber +
                                       " does not have a VariableName");
       }
       if (!string.IsNullOrEmpty(questionBase.VariableName) && questionBase.Answer != null)
       {
           // insert keys (variable names)
           parameterList.AppendFormat("{0}", questionBase.VariableName);

           if (questionBase.QuestionNumber != answerList.Last().QuestionNumber)
           {
               parameterList.Append(", ");
           }

           // insert values
           valuesList.AppendFormat("{0}", questionBase.Answer);
           if (questionBase.VariableName != answerList.Last().VariableName)
               valuesList.Append(", ");
       }
   }

   try
   {
       insertSql.AppendFormat("INSERT INTO {0} ({1}) VALUES ({2})", tableName, parameterList, valuesList);
       Connect(ConnectionHelper.DevConnString,
           c => c.Execute(insertSql.ToString()));
       return true;
   }
   catch (Exception e)
   {
       return false;
   }

}

您是否尝试过使用
Dapper.Contrib
Dapper.Rainbow
?@Kiquenet,看看标题;)我试图用
Dapper.Contrib
来实现这一点。我找到了一份工作。谢谢你的关注。