Azure Функция обновления сущности табличного хранилища - CloudTable.Execute not found - PullRequest
3 голосов
/ 25 февраля 2020

Я начинаю использовать Azure и c# и пытаюсь использовать Table Storage - и использую функцию Azure для обновления сущностей в таблице. Мой код выглядит следующим образом:

 #r "Microsoft.WindowsAzure.Storage"
#r "Newtonsoft.Json"
using System;
using Newtonsoft.Json; 
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

public static async Task<HttpResponseMessage> Run(HttpRequest req, CloudTable lookupTable)
{
    string requestBody = await new StreamReader(req.Body).ReadToEndAsync();
    dynamic data = JsonConvert.DeserializeObject(requestBody);
    string partitionKey = data.Society;
    string rowKey = data.ConnectionDetails.Environment; 
    string newConnection = data.ConnectionDetails.Connection; 

    TableOperation operation = TableOperation.Retrieve<SocietyConnectionDetails>(partitionKey, rowKey); 
    TableResult result = lookupTable.Execute(operation);
    SocietyConnectionDetails societyConnectionDetails = (SocietyConnectionDetails)result.Result; 

    societyConnectionDetails.Connection = newConnection; 
    operation = TableOperation.Replace(societyConnectionDetails); 
    lookupTable.Execute(operation);
}

public class SocietyConnectionDetails : TableEntity
{
    public string Connection {get; set;}
}

Но я получаю следующие ошибки:

2020-02-25T10:33:16.956 [Error] run.csx(17,38): error CS1061: 'CloudTable' does not contain a definition for 'Execute' and no accessible extension method 'Execute' accepting a first argument of type 'CloudTable' could be found (are you missing a using directive or an assembly reference?)
2020-02-25T10:33:16.984 [Error] run.csx(22,17): error CS1061: 'CloudTable' does not contain a definition for 'Execute' and no accessible extension method 'Execute' accepting a first argument of type 'CloudTable' could be found (are you missing a using directive or an assembly reference?)
2020-02-25T10:33:17.011 [Error] run.csx(8,47): error CS0161: 'Run(HttpRequest, CloudTable)': not all code paths return a value

Я вижу, что проблема возникает, когда я пытаюсь «выполнить» мою таблицу Операции ... это может быть относительно простой проблемой, но я изо всех сил пытаюсь понять, почему это не будет работать ...

Спасибо за любую помощь ..

Ответы [ 2 ]

1 голос
/ 25 февраля 2020

Я могу воспроизвести вашу ошибку.

Примерно так:

enter image description here

Решение - добавить файл function.proj в вашу функцию , enter image description here

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFramework>netcoreapp3.0</TargetFramework>
    </PropertyGroup>
    <ItemGroup>
        <PackageReference Include="WindowsAzure.Storage" Version="9.3.3" />
    </ItemGroup>
</Project>

Тогда ошибка должна исчезнуть. (Если вы этого не сделаете. Шаг компиляции не будет успешным.) enter image description here

1 голос
/ 25 февраля 2020

Я предполагаю, что вы используете Azure Runtime 2, и в этом случае проблема связана с вашими ссылками. Вы должны сослаться на пакет nuget Microsoft. Azure .WebJobs.Extensions.Storage и убедиться, что он установлен в вашей функции, в соответствии с этой статьей в документации Microsoft.

...