Ich entwickle eine Web-API, in der ich Dapper verwende, um meine SQL-Aufrufe zu verarbeiten. Zuerst habe ich die folgenden 2 Modelle:
Modell 1 - Dieses Modell hat auch ein untergeordnetes Modell in Form von "Modell 2".
public int COBID { get; set; }
public string ReportingPoint { get; set; }
public string Issuer { get; set; }
public string Group { get; set; }
public string ACCode { get; set; }
public string SourceSystemTradeID { get; set; }
public char SWWR { get; set; }
public string Error { get; set; }
public Model 2 TradeComment { get; set; }
Modell 2
public int TradeCommentId { get; set; }
public string SourceSystemTradeID { get; set; }
public string SanctionerComment { get; set; }
public string SignOffBy { get; set; }
public bool CompletedFlag { get; set; }
public bool PreApprovedFlag { get; set; }
public bool GenuineWWRFlag { get; set; }
public DateTime CreatedDate { get; set; }
public string CreatedBy { get; set; }
Für meine Update
Funktionalität habe ich einen PROC, der alle benötigten Felder aus mehreren Tabellen zusammenfasst. Aufgrund einiger Probleme kann ich diese Prozedur nicht anzeigen. Die Funktionalität dieser Prozedur ist jedoch in Ordnung, da sie schon lange verwendet wurde. Was ich baue, wird darauf sitzen.
Zum Schluss habe ich für meinen dapper-Aufruf die folgende Methode:
public IEnumerable<TradeDetail> GetRecordDetail(string id)
{
using (var dbConnection = Connection)
{
dbConnection.Open();
return dbConnection.Query<TradeDetail, TradeComment, TradeDetail>("wwr.pMyProc",
(detail, comment) =>
{
detail.SourceSystemTradeID = id;
return detail;
}, splitOn: "TradeCommentId", commandType: CommandType.StoredProcedure);
}
}
Und diese Methode wird von meiner API wie folgt aufgerufen:
[HttpPut]
public IActionResult Put(string key, string values)
{
var record = _wwrRepository.GetRecordDetail(key);
JsonConvert.PopulateObject(values, record);
if (!TryValidateModel(record))
{
return BadRequest(ModelState.GetFullErrorMessage());
}
return Ok(record);
}
Wenn ich meinen Code teste, wird mir gesagt, dass ein ID-Wert erwartet wird und dieser übergeben werden muss.
detail.SourceSystemTradeID = id;
Wo meine ID von meiner API abgerufen und an diese Methode übergeben wird.
Könnte mir bitte jemand helfen, meine Code-Anrufe richtig zu formatieren?
Es ist Ihr PROC, der die ID nicht Ihr Feld im Modell erwartet. Sie müssen es mit übergeben
dbConnection.Open();
return dbConnection.Query<TradeDetail, TradeComment, TradeDetail>("wwr.pMyProc",
(detail, comment) =>
{
detail.TradeComment = comment;
return detail;
},
splitOn: "TradeCommentId",
param: new {id = id },
commandType: CommandType.StoredProcedure);
}
Der genaue Name der anonymen ID in new {id = id} hängt von dem tatsächlichen Parameternamen ab, der von Ihrer gespeicherten Prozedur erwartet wird. Beachten Sie außerdem, dass Sie den im Lambda-Ausdruck erhaltenen Kommentarparameter Ihrem TradeComment-Feld in der TradeDetail-Instanz zuordnen müssen