Dapper SQL Query с 2 моделями - PullRequest
       21

Dapper SQL Query с 2 моделями

0 голосов
/ 26 ноября 2018

Я занимаюсь разработкой веб-API, где использую Dapper для обработки вызовов SQL.Во-первых, у меня есть следующие 2 модели:

Модель 1 - с этой моделью также связана дочерняя модель в форме «Модель 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; } 

Модель 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; } 

Для моей Update функциональности у меня есть PROC, который вытягивает все нужные мне поля из нескольких таблиц.Из-за нескольких проблем я не могу показать этот процесс.Тем не менее, функциональность этого процесса хороша, так как он использовался в течение долгого времени.То, что я строю, будет сидеть на вершине.

Наконец-то, для моего грубого вызова, у меня есть следующий метод:

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);

    }
}

И этот метод вызывается моим API следующим образом:

[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);
}

КогдаЯ запускаю test мой код, он говорит мне, что ожидается ожидаемое значение ID, и оно должно быть передано. Я думал, что уже делал это со следующей строкой:

detail.SourceSystemTradeID = id;

Где мой идентификатор взят измой API и перешел к этому методу.

Может кто-нибудь помочь мне правильно отформатировать мой код звонков?

1 Ответ

0 голосов
/ 26 ноября 2018

Это ваш PROC, который ожидает идентификатор, а не ваше поле в модели.Вам нужно передать его с

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);

 }

Точное имя для анонимного id в new {id = id} зависит от фактического имени параметра, ожидаемого вашимсохраненный процесс, также обратите внимание, что вам нужно назначить параметр комментария, полученный в лямбда-выражении, вашему полю TradeComment в экземпляре TradeDetail

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...