gpt4 book ai didi

c# - 无法保存引用类型

转载 作者:太空宇宙 更新时间:2023-11-03 15:59:11 25 4
gpt4 key购买 nike

我是初学者,想要了解有关 Azure 表存储的更多信息,但我很困惑这个简单的示例会失败:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.WindowsAzure;
using Microsoft.WindowsAzure.Storage;
using Microsoft.WindowsAzure.Storage.Table;

namespace AzureTablesTest
{
public class PersonName
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
public class Person : TableEntity
{
public PersonName Name { get; set; }
public int Age { get; set; }

public Person()
{
}

public Person(string lastname, string firstname)
{
RowKey = firstname;
PartitionKey = lastname;
Name = new PersonName { FirstName = firstname, LastName = lastname };
}
}
class Program
{
static void Main(string[] args)
{
// Retrieve the storage account from the connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse("UseDevelopmentStorage=true");

// Create the table client.
CloudTableClient tableClient = storageAccount.CreateCloudTableClient();

// Create the table if it doesn't exist.
CloudTable table = tableClient.GetTableReference("people");
table.CreateIfNotExists();

Person p = new Person("Foo", "Bar");

TableOperation insertOperation = TableOperation.Insert(p);

// Execute the insert operation.
table.Execute(insertOperation);

TableOperation retrieveOperation = TableOperation.Retrieve<Person>("Foo", "Bar");

// Execute the retrieve operation.
TableResult retrievedResult = table.Execute(retrieveOperation);

string firstname = ((Person)retrievedResult.Result).Name.FirstName;
}
}
}

Azure 似乎无法存储引用类型。当我保存并检索 Person 时,检索到的人员的 Name 为 null,因此在尝试从人员的 Name 属性获取 FirstName 时出现空指针异常:

string firstname = ((Person)retrievedResult.Result).Name.FirstName;

我没有在任何地方读到这是不可能的。我以此作为学习的入口:http://www.windowsazure.com/en-us/documentation/articles/storage-dotnet-how-to-use-table-storage-20/ 。通过阅读“简介”

  1. 存储 TB 级的结构化数据,能够为网络级应用程序提供服务
  2. 存储不需要复杂连接、外键或存储过程的数据集,并且可以非规范化以实现快速访问
  3. 使用聚集索引快速查询数据
  4. 通过 WCF 数据服务 .NET 库使用 OData 协议(protocol)和 LINQ 查询访问数据

在我看来,我的例子应该是可以的。但我想这是不可能的?

最佳答案

您可以在 TableEntity 中使用某些属性类型并将它们自动保存到表中。支持的类型列表位于此网页的末尾:http://msdn.microsoft.com/en-us/library/windowsazure/dd179338.aspx 。您的 PersonName 类型是自定义类型,因此不受支持。

您可以重写 TableEntity 的 ReadEntity 和 WriteEntity 方法 ( http://msdn.microsoft.com/en-us/library/microsoft.windowsazure.storage.table.itableentity_methods.aspx ) 以自定义每个属性的序列化/反序列化方式。然后,您可以执行一些操作,例如将 PersonName 中的每个子属性保存到其自己的表属性中。

关于c# - 无法保存引用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22183046/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com