使用Dapper.Contrib和DynamicParameters插入

c# dapper wpf

題 :

有沒有一種聰明的方法可以動態地向對象添加參數並將它們插入到SQL DB中?

最好使用Dapper


我正在寫一個WPF應用程序(其他最重要的東西)我正在收集調查問卷數據。我正在使用Dapper將c#對象映射到SQL語句。

我的問題是我不想將所有列名稱硬編碼為對象屬性,因為我有很多它們!

因此,我想使用Dapper的DynamicParameters動態生成Dapper可以使用Dapper.Contrib Insert方法Insert數據庫的對象。

我做了一個像這樣的抽像類:

public abstract class IDbRecord : DynamicParameters
    {
        [Key]
        public string H4Id { get; set; }
    }

並使用DynamicParameters.Add方法在另一個方法中添加參數。

當我的參數添加到我的IDbRecord派生對象時,我嘗試插入它。

這是導致在Insert medthod試圖插入的公共屬性DynamicParameters ,而不是私人的內容parameters Dictonary。在查看Dapper.Contrib的自述文件時,這是有道理的。我只是希望,他們已經實現的Insert()來獲取parameters Dictonary當對象是源自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;
   }

}


許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因