为啥 CreateTableClient 不存在?

Posted

技术标签:

【中文标题】为啥 CreateTableClient 不存在?【英文标题】:Why the CreateTableClient doesn't exist?为什么 CreateTableClient 不存在? 【发布时间】:2020-06-16 07:03:35 【问题描述】:

我是一个新的 azure 表用户,我正在尝试向表中写入一些内容,有人可以解释一下为什么 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");
        

【问题讨论】:

不起作用并没有真正的帮助。什么不完全起作用,你得到空值,一个例外。请更具体。 【参考方案1】:

Table Services 现在位于 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

【讨论】:

【参考方案2】:

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

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

一种解决方案是使用Microsoft.Azure.Cosmos.Table,如另一个答案中所述。今后,这是推荐的方式。

其他选项是只使用较旧的 SDK (Microsoft.WindowsAzure.Storage)。在这种情况下,您将从 Microsoft.WindowsAzure.Storage 命名空间中获得 CloudStorageAccount,并且该命名空间具有 CloudTableClient 的定义。

【讨论】:

以上是关于为啥 CreateTableClient 不存在?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Ajax.BeginForm 不存在?

为啥 int 存在于 C 中,为啥不只是 short 和 long

即使路径不存在,为啥 Path(...).exists 为真? [复制]

Java:如果文件不存在,我无法为文件是不是存在创建条件。为啥?

为啥路由存在可以视为路由不匹配(​​RoutingError)?

为啥 Parcel.writeBoolean(boolean) 不存在? [复制]