C # SqlKata запрос на обновление движка не выполняется - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть функция C #, которая предназначена для обновления таблицы SQL Server 2016.Я использую движок SqlKata для этой цели.

Возможно, я делаю что-то очень простое / глупое, у меня такое ощущение, что я создаю запрос, но не выполняю его?Документация просто показывает следующее для оператора UPDATE:

var query = new Query("Posts").WhereNull("AuthorId").AsUpdate(new {
    AuthorId = 10
});

Мое обновление немного сложнее, но по сути построено так же.Я использую динамический объект для некоторых свойств, поэтому я заставляю ToString и Convert.ToInt32 как часть тестирования, есть ли проблемы с самими свойствами.Регистрация указывает, что эти значения являются правильными и присутствуют как бы то ни было.

using (var connection = new SqlConnection(await RetrieveParameterStoreValue(ParameterStoreStrings.Database, true, context, environmentLogLevel)))
{
    var db = new QueryFactory(connection, new SqlServerCompiler())
    {
        // Log the compiled query to the console
        Logger = compiled =>
                        {
                            CreateCloudWatchLog($"Query = {compiled.ToString()}", context, LogLevel.Trace, environmentLogLevel);
                        }
    };

    string tableName = updateRequest.insite_request.objectReference.ToString();

    foreach (dynamic stockUpdate in updateRequest.insite_request.payload.items)
    {
        CreateCloudWatchLog($"Servername = {updateRequest.insite_request.payload.store_reference.ToString()} sku={stockUpdate.sku.ToString()} new soh={Convert.ToInt32(stockUpdate.committed_count)}", context, LogLevel.Error, environmentLogLevel);

        var query = db.Query(tableName)
                      .Where(new {
                            sku = stockUpdate.sku.ToString(),
                            ServerName = updateRequest.insite_request.payload.store_reference.ToString()
                            })
                      .AsUpdate(new
                            {
                                stock_on_hand = Convert.ToInt32(stockUpdate.committed_count)
                            });

        CreateCloudWatchLog($"stock update for {tableName}", context, LogLevel.Error, environmentLogLevel);
    }
}

У меня такое чувство, что мне нужно как-то вызвать построенный запрос, но я не совсем понимаю, как.У меня есть некоторый код SqlKata, который выполняет оператор SELECT, и для его вызова я использую

 var results = query.Get();

Но я не могу найти какую-либо документацию вокруг аналогичного вызова (вдоль строк query.Update или аналогичного?) Извиняюсь за глупый вопрос.

Для справки: зарегистрированный вывод не показывает никаких признаков выполнения, и данные в таблице остаются без изменений.

[Error] Servername = P777S001 sku=13643 new soh=10
[Error] stock update for InSiteClickCollect
[Error] Servername = P777S001 sku=13644 new soh=10
[Error] stock update for InSiteClickCollect
END RequestId: 2fec77e5-6a4e-4990-85e8-f541c9df6eef

1 Ответ

0 голосов
/ 15 февраля 2019

метод AsUpdate не выполняет запрос, и он используется для построения строки обновления sql * только 1003 *.

Чтобы выполнить запрос, необходимо выполнить следующее.

  1. использовать db.Query() вместо new Query(), где дБ - это экземпляр QueryFactory (он возвращает экземпляр XQuery, следовательно, исполняемый запрос)
  2. использовать Update, Insert, Count и т. Д. ... вместо AsUpdate, AsInsert и AsCount

Настоятельно рекомендую прочитать раздел об исполнении в документации https://sqlkata.com/docs/execution/

...