[英]Inserting with Dapper.Contrib and DynamicParameters
題 :
有沒有一種聰明的方法可以動態地向對象添加參數並將其插入到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 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.