gpt4 book ai didi

c# - 如果 Azure 表存储服务上下文遇到一个错误,它会继续抛出相同的错误

转载 作者:行者123 更新时间:2023-12-03 06:03:54 25 4
gpt4 key购买 nike

当我尝试在 azure 表存储上更新或创建实体时,有时会抛出“实体已存在”或“其中一个请求输入超出范围”之类的错误,之后如果我尝试创建或者也更新该表上的其他一些实体,它继续抛出相同的错误。输入没有问题,就像我重新启动iis服务器一样,它又开始工作了。我不知道为什么会发生这种情况。

我尝试了不同的 SaveChangesOptions,包括“ContinueOnError”,但表服务上下文在遇到一个错误后,在所有进一步更新/创建时继续抛出错误。

下面是我如何创建表存储服务上下文的代码。

请让我知道问题可能是什么,这对我来说是一个巨大的障碍,因为如果表服务上下文仅遇到一个错误,我的应用程序中的主要功能就会停止工作。

public class AudioRecordRepository : Repository<PersistedAudioRecord>, IAudioRecordRepository
{
private TableStorageServiceContext<PersistedAudioRecord> audioRecordServiceContext;
private CloudStorageAccount cloudStorageAccount;

public AudioRecordRepository(IServiceContext<PersistedAudioRecord> serviceContext)
: base(serviceContext)
{
if (RoleEnvironment.IsAvailable)
cloudStorageAccount = CloudStorageAccount.Parse(RoleEnvironment.GetConfigurationSettingValue("StorageConnectionString"));
else
cloudStorageAccount = CloudStorageAccount.Parse(ConfigurationManager.AppSettings["StorageConnectionString"]);

audioRecordServiceContext = new TableStorageServiceContext<PersistedAudioRecord>(TableNames.AudioRecord, cloudStorageAccount.TableEndpoint.ToString(), cloudStorageAccount.Credentials) { IgnoreResourceNotFoundException = true };

}

public bool CreateRecord(PersistedAudioRecord record)
{
this.audioRecordServiceContext.Create(record);
this.audioRecordServiceContext.SaveChangesWithRetries(SaveChangesOptions.ContinueOnError);

return true;
}
}

最佳答案

似乎包含您的实体的上下文 (audioRecordServiceContext) 是在类级别声明的,并且不清楚是否/何时将其清除。

表存储上下文遵循“工作单元”设计模式。它们旨在跟踪实体。如果您在上下文中添加了一个“坏”实体并尝试保留,那么您显然会收到错误。然而,您需要注意的是,您的上下文并没有丢弃坏实体。它仍在跟踪它并且仍然认为您想要保存它。因此,下次调用 SaveChanges 将尝试再次保存它。

建议:在上下文中放置一个“using”语句,并仅当您需要保存实体时在函数内声明它 - 不要让它位于类级别 - 除非您有需要它的特定用例。但如果您这样做,请确保将失败的实体从上下文对象中拉出(您可以通过检查上下文对象的实体集合来手动执行此操作)

HTH

关于c# - 如果 Azure 表存储服务上下文遇到一个错误,它会继续抛出相同的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18059483/

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