Обновлять и удалять документы в db космос через функции лазури

Я новичок в Космосе дБ, а также в лазурных функциях и быстро никуда не делся. Я смог найти каждый учебник под солнцем для создания и чтения документов, но не для обновления и удаления. Ни у кого, кажется, нет полного учебника CRUD, использующего функции лазури.

Может кто-нибудь показать мне типичный файл.csx в функциях Azure, который принимает документ, обновляет его и возвращает ответ OK?

Я уже пробовал это

#load "..\Shared\Classes.csx"
using System.Net;

public static HttpResponseMessage Run(HttpRequestMessage req, 
IEnumerable<Business> businessToBeUpdated, out dynamic updatedBusiness, 
TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");

//compiler requires this assignment
updatedBusiness = null;

// Get request body
Business data = req.Content.ReadAsAsync<Business>().Result;
businessToBeUpdated = businessToBeUpdated.FirstOrDefault<Business>();
log.Info(businessToBeUpdated.Count().ToString());
if(businessToBeUpdated != null && data != null)
{
    //update it
    businessToBeUpdated = data;
    //updatedBusiness.id = data.id;
    log.Info(businessToBeUpdated.website);
}
else{
    return req.CreateResponse(HttpStatusCode.BadRequest);
}

return req.CreateResponse(HttpStatusCode.OK);
}

Вот связывание, связанное с этим.

{
"bindings": [
{
  "authLevel": "anonymous",
  "name": "req",
  "type": "httpTrigger",
  "direction": "in",
  "route": "updatebiz/{id}"
},
{
  "name": "$return",
  "type": "http",
  "direction": "out"
},
{
  "type": "documentDB",
  "name": "businessToBeUpdated",
  "databaseName": "dbname",
  "collectionName": "Businesses",
  "sqlQuery": "Select * FROM c where c.id = {id}",
  "connection": "connection",
  "direction": "in"
},
{
  "type": "documentDB",
  "name": "updatedBusiness",
  "databaseName": "dbname",
  "collectionName": "Businesses",
  "createIfNotExists": false,
  "connection": "connection",
  "direction": "out"
  }
],
"disabled": false
}

1 ответ

Решение

Простейший пример функции, которая обновляет документ, выглядит точно так же, как и функция, которая создает документ: функция будет выполнять одно или другое в зависимости от того, указан ли документ с указанным id уже существует.

Вы не упоминаете, с какой именно проблемой вы сталкиваетесь. Ваш код даже не компилируется, имея перечисляемые и отдельные объекты, назначенные друг другу. Кроме того, вы никогда не назначаете updatedBusiness к чему-либо кроме null,

Я пришел с рабочим примером, который делает то, что, как я полагаю, вы пытались выполнить.

csx сценарий:

using System.Net;

public class Business
{
    public string id { get; set;}
    public string name { get; set;}
}

public static HttpResponseMessage Run(HttpRequestMessage req, 
    Business businessToBeUpdated, out Business updatedBusiness, TraceWriter log)
{
    log.Info("C# HTTP trigger function processed a request.");

    var data = req.Content.ReadAsAsync<Business>().Result;
    if(businessToBeUpdated == null || data == null)
    {
        updatedBusiness = businessToBeUpdated;
        return req.CreateResponse(HttpStatusCode.BadRequest);
    }

    updatedBusiness = data; 
    // or merge data and businessToBeUpdated in some desired way

    return req.CreateResponse(HttpStatusCode.OK);
}

function.json:

{
  "bindings": [
    {
      "authLevel": "anonymous",
      "name": "req",
      "type": "httpTrigger",
      "direction": "in",
      "route": "updatebiz/{id}"
    },
    {
      "name": "$return",
      "type": "http",
      "direction": "out"
    },
    {
      "type": "documentDB",
      "name": "businessToBeUpdated",
      "databaseName": "dbname",
      "collectionName": "Businesses",
      "id": "{id}",
      "connection": "connection",
      "direction": "in"
    },
    {
      "type": "documentDB",
      "name": "updatedBusiness",
      "databaseName": "dbname",
      "collectionName": "Businesses",
      "id": "{id}",
      "connection": "connection",
      "direction": "out"
    }
  ],
  "disabled": false
}
Другие вопросы по тегам