Je développe une interface Web où j'utilise Dapper pour gérer mes appels SQL. Tout d'abord, j'ai les 2 modèles suivants:
Modèle 1 - Ce modèle est également associé à un modèle enfant sous la forme de "Modèle 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; }
Modèle 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; }
Pour ma fonctionnalité de Update
, j'ai un PROC qui extrait tous les champs dont j'ai besoin de plusieurs tables. En raison de quelques problèmes, je ne peux pas montrer ce processus. Cependant, la fonctionnalité de ce proc est très bien car c'est quelque chose qui est utilisé depuis longtemps. Ce que je construis va reposer dessus.
Enfin, pour mon appel pimpant, j'ai la méthode suivante:
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);
}
}
Et cette méthode est appelée par mon API comme suit:
[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);
}
Lorsque je teste mon code, il me dit qu’une valeur d’ID est attendue et qu’elle doit être indiquée. Je pensais déjà le faire avec la ligne suivante:
detail.SourceSystemTradeID = id;
Où mon identifiant est collecté à partir de mon API et transmis à cette méthode.
Est-ce que quelqu'un pourrait m'aider à formater correctement mes appels de code?
C'est votre PROC qui attend l'ID et non votre champ dans le modèle. Vous devez le transmettre avec
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);
}
Le nom exact de l' identifiant anonyme dans le nouveau {id = id} dépend du nom du paramètre attendu par votre procédure stockée. Notez également que vous devez affecter le paramètre comment reçu dans l'expression lambda à votre champ TradeComment dans l'instance TradeDetail