0

我是一个新的天蓝色表用户,我正在尝试向表中写入一些东西,有人可以解释一下为什么 storageAccount.CreateTableClient() 不起作用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Azure.WebJobs;
using Microsoft.WindowsAzure.Storage.Table;
using Microsoft.Extensions.Logging;
using System.ComponentModel.DataAnnotations.Schema;
using Microsoft.Azure.Storage.Queue;
using Microsoft.Azure.Storage;
using Microsoft.Extensions.Configuration;
using Newtonsoft.Json;
using Microsoft.WindowsAzure.Storage.Blob;




namespace project_3_backend
{
    public class Functions
    {
        private static CloudTable LoanInfo = null;

        private static IConfiguration Configuration;

        public Functions(IConfiguration configuration)
        {
            Configuration = configuration;
        }

        public static void WritetoTable()
        {
            string connectionString = Configuration.GetValue<String>("AzureWebjobsStorage");
            CloudStorageAccount storageAccount = CloudStorageAccount.Parse(connectionString);
            CloudTableClient tableClient = storageAccount.CreateTableClient();
            CloudTable table_mortage = tableClient.GetTableReference("LoanInfo");
        }
}
4

2 回答 2

1

表服务现在位于 Cosmos Db 下:

安装以下 nuget 包:

  • Microsoft.Azure.Cosmos.Table
  • Microsoft.Extensions.Configuration
  • Microsoft.Extensions.Configuration.Json
  • Microsoft.Extensions.Configuration.Binder

https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-develop-table-dotnet#install-the-required-nuget-package

然后:

public static async Task<CloudTable> CreateTableAsync(string tableName)
  {
    string storageConnectionString = AppSettings.LoadAppSettings().StorageConnectionString;

    // Retrieve storage account information from connection string.
    CloudStorageAccount storageAccount = CreateStorageAccountFromConnectionString(storageConnectionString);

    // Create a table client for interacting with the table service
    CloudTableClient tableClient = storageAccount.CreateCloudTableClient(new TableClientConfiguration());

    Console.WriteLine("Create a Table for the demo");

    // Create a table client for interacting with the table service 
    CloudTable table = tableClient.GetTableReference(tableName);
    if (await table.CreateIfNotExistsAsync())
    {
      Console.WriteLine("Created Table named: {0}", tableName);
    }
    else
    {
      Console.WriteLine("Table {0} already exists", tableName);
    }

    Console.WriteLine();
    return table;
}

也许您仍然可以使用旧的 nuget 包来使其与 Azure 存储一起使用,但恐怕您不会拥有最新版本的包。

https://docs.microsoft.com/en-us/azure/cosmos-db/tutorial-develop-table-dotnet#parse-and-validate-the-connection-details

于 2020-03-03T20:46:38.340 回答
0

我相信您收到此错误是因为您在代码中使用了两个不同的存储 SDK。

您正在使用Microsoft.WindowsAzure.Storage哪个是较旧的 SDK 以及Microsoft.Azure.Storage哪个是较新的 SDK。CloudStorageAccount目前,您正在从命名空间获得参考Microsoft.Azure.Storage,并且没有定义CloudTableClient,因此您会收到此错误。

一种解决方案是Microsoft.Azure.Cosmos.Table按照另一个答案中的说明使用。往前走,这是推荐的方式。

其他选择是仅使用旧版 SDK ( Microsoft.WindowsAzure.Storage)。在这种情况下,您CloudStorageAccount将从Microsoft.WindowsAzure.Storage命名空间获取,并且它具有CloudTableClient.

于 2020-03-04T01:49:52.973 回答