gpt4 book ai didi

Azure 表未将属性加载到对象中

转载 作者:行者123 更新时间:2023-12-02 07:10:40 26 4
gpt4 key购买 nike

我有一个对象Record,它有一个名称和一个主题

主题是嵌入在类型化类中的键值对,例如“01”-“Sport”、“02”-“Home”等

我有一个像这样的对象:

public class DescriptionEntity : TableEntity
{
public string Description { get; set; }
public string Key { get { return RowKey; } set { RowKey = value; } }

public DescriptionEntity() { }
}

public class Theme : DescriptionEntity
{
}

/* The Record has a "string" and a "Theme" property */
public class Record : TableEntity
{
[...]
public string Name { get; set; }
public Theme Theme { get; set; }
}

问题是当我尝试从 Azure 表加载该记录时,如下所示:

var record = await repository.GetTableEntityAsync<Record>(id, RecordConst.RecordPartitionKey);

// ..........................
public async Task<T> GetTableEntityAsync<T>(string rowKey, string partitionKey) where T : ITableEntity, new()
{
var table = GetTable<T>();

TableQuery<T> query = new TableQuery<T>().Where(
TableQuery.CombineFilters(
TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, partitionKey),
TableOperators.And,
TableQuery.GenerateFilterCondition("RowKey", QueryComparisons.Equal, rowKey))).Take(1);

var result = new T();

TableContinuationToken continuationToken = null;
do
{
Task<TableQuerySegment<T>> querySegment = table.ExecuteQuerySegmentedAsync(query, continuationToken);
TableQuerySegment<T> segment = await querySegment;
result = segment.FirstOrDefault();
continuationToken = segment.ContinuationToken;
} while (continuationToken != null);

return result;
}

我获取了record.Name,但record.Theme始终保持“null”,不从“Record”表加载,就像:

Partition Key Name    Theme
"record" "x" "test" "01"

也在我的“主题”表中

Partition Key  Description
"en" "01" "Sport"

我尝试向“主题”类添加构造函数

public class Theme : DescriptionEntity
{
public Theme() : base() { }
public Theme(string key) : base(key) { }
}

但这并没有改变结果......

有没有办法明确地说“采用字符串“Theme”并使用new Theme(string)来创建Theme属性”

最佳答案

您可能已经知道,Azure Tables 是一个键/值存储。然而,要考虑的要点是 Value 可以是以下预定义类型:StringInt32Int64DateTimeOffsetDoubleGUIDBinary

在您的情况下,属性 Theme 的值属于 Theme 类型,它不是受支持的类型之一,因此存储客户端库不会反序列化它,因此您正在获取 null 值。

一种可能的解决方案是使用 JSON 序列化程序以字符串格式存储此属性的值,并在获取它时在应用程序中反序列化它。

关于Azure 表未将属性加载到对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45277007/

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